【问题标题】:Import numpy from macOS Terminal running python launches but not from python script从运行 python 启动但不是从 python 脚本的 macOS 终端导入 numpy
【发布时间】:2021-01-08 03:46:52
【问题描述】:

我的目标是能够通过简单的脚本运行 NumPy。作为新手,简单并不是那么简单。从终端运行 python,NumPy 工作得很好。但是,我无法从脚本中导入它。 numpy 示例从 python 运行,结果如下。

>>> import numpy as np
>>> a = np.arange(15).reshape(3, 5)
>>> a
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])

但是,从我的脚本中,runNumPy.py

#!/usr/bin/sh/env python3.6
print("Hello world! from runNumPy.py in python called by Terminal")
import sys, os
print("Current Working Directory: ", os.getcwd())
import numpy as np

我明白了

>>> a = np.arange(15).reshape(3, 5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'np' is not defined

我已经尝试过使用“import numpy as np”和没有“as np”。

我的终端脚本是

#!/bin/sh 
echo "Hello, world! Starts helloWorld.sh Terminal script."
source opt/anaconda3/etc/profile.d/conda.sh
conda activate bioETE
cd opt; cd anaconda3; cd envs; cd bioETE; cd lib; cd python3.6; cd site-packages
python ./runNumPyS.py  #This runs runNumPyS.py from the terminal
python ./runNumPy.py    #This runs the runNumPy.py from the terminal
python

它的输出是

Hello, world! Starts helloWorld.sh Terminal script.
Hello world: from helloWorld.py in python script called by Terminal
Hello world! from runNumPy.py in python called by Terminal
Current Working Directory:  home/opt/anaconda3/envs/bioETE/lib/python3.6/site-packages
Python 3.6.12 |Anaconda, Inc.| (default, Sep  8 2020, 17:50:39) 
[GCC Clang 10.0.0 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 

如前所述,我的目标是在 python 提示符下启动 NumPy >>> 而不使用另一个 import 语句。这个 shell 脚本工作正常。它调用python脚本。

在上面的输出中,第一个“Hello World”是在我继续之前显示 shell 脚本正在运行。另外两个,“Hello World”,用于查看是否调用了 python 脚本。

您可以通过 python 脚本输出看到 python 打印命令和 sys 和 os 导入调用工作正常。系统调用似乎告诉我我在正确的目录中..??

runNumPy.py 脚本是

#!/usr/bin/sh/env python3.6
print("Hello world! from runNumPy.py in python called by Terminal")
import sys, os
print("Current Working Directory: ", os.getcwd())
import numpy as np

在 python 提示符下,我收到以下错误。

>>> a = np.arange(15).reshape(3, 5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'np' is not defined

显然,numpy 没有被导入。同样,在同样的提示下,如果我先输入“import numpy as np”,NumPy 就可以正常工作。

NumPy的模块numpy位于

home/opt/anaconda3/envs/bioETE/lib/python3.6/site-packages/numpy

我尝试在两个地方放置 python 脚本 runNumPy.py。

1)home/opt/anaconda3/envs/bioETE/lib/python3.6/site-packages
2)home/opt/anaconda3/envs/bioETE/lib/python3.6/

这两个地方似乎都不起作用。我暂时被困住了。任何和所有有用的建议或一两个解决方案将不胜感激。

【问题讨论】:

  • 您正在使用 MacOS Python 运行 runNumPy.py,但您没有为该版本安装 NumPy。删除第一行中的#!/usr/bin/sh/env python3.6,执行conda activate bioETE,然后执行conda install numpy,然后使用python runNumPy.py 运行您的脚本。此外,将 runNumPy.py 放在站点包中听起来不是一个好主意...
  • 感谢您的反馈。我听从了你的建议,我的问题仍然存在。但是,我确实有一个带有评论的更新 conda:# All requested packages already installed。所以当然我从中删除了安装 conda。
  • 通常检查你使用的 Python 的最简单方法是在终端中写入 which python(适用于任何命令)。你应该得到/home/opt/anaconda3/envs/bioETE/bin/python/
  • 谢谢。是的,我只是确认正确的是响应来自 conda 环境的脚本。我想我的简短问题是:python 脚本能否将变量、函数和类返回给 python CLI “记住”它们以交互方式使用而无需重新输入它们。就我而言,除了打印命令,脚本中发生的事情都保留在脚本中。
  • 谢谢,我可能会研究 iPython。到目前为止,我相信我的问题已经解决了。请注意下面 vy32 的建议。

标签: python macos numpy terminal


【解决方案1】:

你写:

如前所述,我的目标是在 python 提示符下启动 NumPy >>> 而不使用另一个 import 语句。这个 shell 脚本工作正常。它调用python脚本。

这实际上不是一个好的目标。您应该尝试改掉从交互式提示符运行 python 的习惯。很难以这种方式开发重要的程序。如果你真的想以这种方式运行 Python,你应该考虑使用 Jupyter Notebook 或 JupyterLab,它们都包含在你的 Python anaconda 版本中。

您不想将一堆东西侵入您的环境的原因是您将无法创建其他人可以轻松使用的脚本或程序。这也是您不想将当前目录的依赖项构建到程序中的原因。你应该依靠site-packagessys.path;您不应该更改您的当前目录,以便 site-packages 是您的当前目录。

这有意义吗?

但是,如果你真的想搞砸命令行环境,你会发现阅读这个文档很有用:

特别是,设置环境变量PYTHONSTARTUP 以包含您希望在python 以交互模式启动之前执行的python 命令。

【讨论】:

  • 感谢您的建议,是的,您告诉我的很有意义。在我开始这个小项目后,动力让我继续前进。我认为代码会起作用,即使很尴尬也有办法。
  • 太棒了!我刚刚将 % export PYTHONSTARTUP="./runNumPyS.py" 添加到我的终端脚本中,并且 "voila" numpy 作为 np 已经在 python 启动时运行。魔法!感谢您为我指明正确的方向。 BTY 脚本 runNumPyS.py 只写了“import numpy as np”,它位于终端脚本中的“export”之后。
  • 很高兴我能帮上忙。记得阅读文档。是你的朋友。
猜你喜欢
  • 1970-01-01
  • 2011-04-14
  • 2017-06-14
  • 2014-12-20
  • 2018-07-09
  • 1970-01-01
  • 2019-06-14
  • 2019-11-11
  • 2020-11-27
相关资源
最近更新 更多