Python 导入适用于解释器,不适用于脚本 Numpy/Matplotlib
Posted
技术标签:
【中文标题】Python 导入适用于解释器,不适用于脚本 Numpy/Matplotlib【英文标题】:Python import works in interpreter, doesn't work in script Numpy/Matplotlib 【发布时间】:2012-04-06 18:16:22 【问题描述】:我在 OSX Snow Leopard 上,我在脚本中运行 2.7,而解释器似乎在运行 2.6
在我能够导入 numpy 之前,但在尝试导入 matplotlib 时会出错,所以我去寻找解决方案并更新了我的 PYTHONPATH 变量,但我认为我做错了,现在只是把所有事情都搞砸了。
这是我尝试在脚本中导入 numpy 时得到的结果:
Traceback(最近一次调用最后一次): 文件“./hh_main.py”,第 5 行,在 导入 numpy 文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site->packages/numpy/init.py”,第 137 行,在 导入 add_newdocs 文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site->packages/numpy/add_newdocs.py”,第 9 行,在 从 numpy.lib 导入 add_newdoc 文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site->packages/numpy/lib/init.py”,第 4 行,在 从 type_check 导入 * 文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site->packages/numpy/lib/type_check.py”,第 8 行,在 将 numpy.core.numeric 导入为 _nx 文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site->packages/numpy/core/init.py”,第 5 行,在 导入多数组 ImportError:dlopen(/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site->packages/numpy/core/multiarray.so,2):找不到符号:_PyCapsule_Import 引用自:/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site->packages/numpy/core/multiarray.so 预期在:平面命名空间 在 /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site->packages/numpy/core/multiarray.so
此外,这是我从解释器中的 sys.path 得到的:
['', '/Users/joshuaschneier/Documents/python_files', '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages', '/Library/Frameworks/Python .framework/Versions/2.7/lib/python27.zip', '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', '/Library/Frameworks/Python.framework/Versions/2.7/lib /python2.7/plat-darwin', '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', '/Library/Frameworks/Python.framework/Versions/2.7/lib /python2.7/plat-mac/lib-scriptpackages', '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', '/Library/Frameworks/Python.framework/Versions /2.7/lib/python2.7/lib-old', '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload']
这是我的 PYTHONPATH,我猜我更新错了:
:/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/
感谢您的帮助。
【问题讨论】:
【参考方案1】:您通常需要为您使用的每个 python 版本安装一次 numpy、matplotlib 等,因为它会自行安装到特定的“python2.x/site-packages”目录中。
上述输出是从 2.6 还是 2.7 会话生成的?如果它是 2.6 会话,那么是的,将 PYTHONPATH 指向 2.7 将不起作用 - numpy 包含已编译的 C 代码(例如 multiarray.so 文件),该代码将针对特定版本的 python 构建。
如果你不想维护两组包,我建议安装 numpy、matplotlib 等所有 2.7 版,删除 PYTHONPATH 设置,并确保脚本和解释器会话都使用 2.7 版。
如果您想保留这两个版本,您只需将每个软件包安装两次(并且您可能仍然需要撤消 PTYHONPATH 更改)
【讨论】:
我发现了问题。解释器运行的是 2.7,但是当我查看 /usr/bin/ 时,我的 she-bang 只能找到 2.5 和 2.6。知道 2.7 可能隐藏在哪里吗?即使我重新安装它仍然没有出现在 /usr/bin 知道了,只是把它改成了 /usr/local/bin 我真的不明白为什么它不在 /usr/bin 中。以上是关于Python 导入适用于解释器,不适用于脚本 Numpy/Matplotlib的主要内容,如果未能解决你的问题,请参考以下文章
Python3 正则表达式不适用于脚本,但适用于 pythex.org