我最近更新了我安装的所有pip包,但我无法再导入mpi4py。如果我尝试加载它,我会在交互模式和运行脚本时收到错误ImportError: No module named mpi4py
。 (对于python 2.7和python 3也会发生这种情况。)(如果相关,我仍然使用OS X Yosemite。)
运行$ python -c "import mpi4py; print(mpi4py.__file__)"
输出为:
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named mpi4py`
,pip show -f mpi4py
的输出为:
Name: mpi4py
Version: 3.0.0
Summary: Python bindings for MPI
Home-page: https://bitbucket.org/mpi4py/mpi4py/
Author: Lisandro Dalcin
Author-email: dalcinl@gmail.com
License: BSD
Location: /usr/local/lib/python2.7/site-packages
Requires:
Files:
mpi4py-3.0.0.dist-info/DESCRIPTION.rst,mpi4py-3.0.0.dist-info/INSTALLER,mpi4py-3.0.0.dist-info/METADATA,mpi4py-3.0.0.dist-info/RECORD,mpi4py-3.0.0.dist-info/WHEEL,mpi4py-3.0.0.dist-info/metadata.json,mpi4py-3.0.0.dist-info/top_level.txt,mpi4py/MPI.pxd,mpi4py/MPI.so,mpi4py/__init__.pxd,mpi4py/__init__.py,mpi4py/__init__.pyc,mpi4py/__main__.py,mpi4py/__main__.pyc,mpi4py/bench.py,mpi4py/bench.pyc,mpi4py/dl.so,mpi4py/futures/__init__.py,mpi4py/futures/__init__.pyc,mpi4py/futures/__main__.py,mpi4py/futures/__main__.pyc,mpi4py/futures/_base.py,mpi4py/futures/_base.pyc,mpi4py/futures/_lib.py,mpi4py/futures/_lib.pyc,mpi4py/futures/aplus.py,mpi4py/futures/aplus.pyc,mpi4py/futures/pool.py,mpi4py/futures/pool.pyc,mpi4py/futures/server.py,mpi4py/futures/server.pyc,mpi4py/include/mpi4py/mpi.pxi,mpi4py/include/mpi4py/mpi4py.MPI.h,mpi4py/include/mpi4py/mpi4py.MPI_api.h,mpi4py/include/mpi4py/mpi4py.h,mpi4py/include/mpi4py/mpi4py.i,mpi4py/libmpi.pxd,mpi4py/mpi.cfg,mpi4py/run.py,mpi4py/run.pyc
如果我运行python -c "import sys; print(sys.path)"
,我会:
['', '$HOME',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
'/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload',
'/Users/cns08/Library/Python/2.7/lib/python/site-packages',
'/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC',
'/Library/Python/2.7/site-packages']
和echo $PATH
给了我:
/usr/local/bin:/Library/Frameworks/Python.framework/Versions/3.4/bin
:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Library/TeX/texbin
答案 0 :(得分:2)
我们一起发现了这个问题 - 您的计算机上安装了两个python - 系统一个(/usr/bin/python
)和“brewed”一个,通过$ brew install python
安装并位于{{ 1}}。 /usr/local/opt/python/libexec/bin/python
中缺少它,因此命令PATH
引用了系统python。但是,所有$ python ...
命令都引用了brewed python。特别是,为酿造版本安装并更新了$ pip ...
,而系统python无法访问它。解决方案是将酿造的python添加回mpi4py
:
PATH
<{1>}中的。
至于我,我不想使用brewed python来避免这种错误。虽然这是高度自以为是,因为许多人宁愿不与系统python叮当作响而不打破它。此外,此配置需要export PATH="/usr/local/opt/python/libexec/bin:$PATH"
!尽管如此,到目前为止我的方法并没有遇到任何问题,所以这就是我所做的:
列出您为brewed python安装的所有软件包:
~/.bash_profile
我们需要这个文件来使用系统python恢复它们。
如果您已经安装了brew,请通过从sudo
为系统python安装$ pip list --format=freeze > packages-with-brewed-python.txt
(这是您需要~/.bash_profile
的唯一步骤):
pip
现在您可以使用sudo
系统安装添加软件包的内容。通过发出$ sudo easy_install pip
:
pip
卸载brewed python:
pip -V
我使用 $ pip -V
pip 9.0.1 from /Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg (python 2.7)
安装的每个软件包,我都使用$ brew uninstall python
密钥,因此我不再需要pip
。因此,要使用新的--user
恢复软件包,请运行
sudo
如果您愿意,您现在可以清理煮好的python软件包以释放一些空间:
pip
这种方法的唯一限制是我需要使用$ pip install --user -r packages-with-brewed-python.txt
密钥安装软件包,因此它们只能在我的用户帐户上使用(系统范围内没有安装任何软件)。我也在一个没有管理员权限的用户帐户下工作(我有一个单独的帐户),所以基本上,$ rm -rf /usr/local/lib/python2.7/site-packages/
对我来说是不行的。
同样,这不是任何建议,但与安装两个相同的python版本之间的必要性相比,它为我节省了许多麻烦。