Mac OS X上更新后未导入Python包

Mac OS X上更新后未导入Python包,python,macos,mpi,Python,Macos,Mpi,我最近更新了我安装的所有pip软件包,无法再导入mpi4py。如果我尝试加载它,则在交互模式下和运行脚本时都会出现一个错误ImportError:No module named mpi4py。(对于Python2.7和Python3也是如此。)(如果相关的话,我仍然在使用OS X Yosemite。) 运行$python-c“导入mpi4py;打印(mpi4py.\uuuuu文件)”输出为: Traceback (most recent call last): File "<string

我最近更新了我安装的所有pip软件包,无法再导入mpi4py。如果我尝试加载它,则在交互模式下和运行脚本时都会出现一个错误
ImportError:No module named mpi4py
。(对于Python2.7和Python3也是如此。)(如果相关的话,我仍然在使用OS X Yosemite。)

运行
$python-c“导入mpi4py;打印(mpi4py.\uuuuu文件)”
输出为:

Traceback (most recent call last): 
File "<string>", line 1, in <module> 
ImportError: No module named mpi4py`
如果我运行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

我们一起发现了这个问题—您的机器上安装了两台python—系统版(
/usr/bin/python
)和“brewed”版,通过
$brew install python
安装,位于
/usr/local/opt/python/libexec/bin/python
下。它在路径
中丢失,因此命令
$python…
引用了系统python。不过,所有的
$pip…
命令都引用了酝酿的python。特别是,为酝酿的版本安装并更新了
mpi4py
,而系统python无法访问它。解决方案是将煮好的python添加回路径:

export PATH="/usr/local/opt/python/libexec/bin:$PATH"
~/.bash\u配置文件中


至于我,我不喜欢使用酝酿的python来避免这种错误。尽管这是非常固执己见的,因为许多人不喜欢修补python系统,也不喜欢破坏它。此外,此配置还需要
sudo
!不过,到目前为止,我的方法没有遇到任何问题,所以我就是这么做的:

  • 列出您为编写的python安装的所有软件包:

    $ pip list --format=freeze > packages-with-brewed-python.txt
    
    $ brew uninstall python
    
    我们需要这个文件来用python系统还原它们

  • 如果已安装brewed python,请从
    ~/.bash\u profile

  • 为系统python安装
    pip
    (这是唯一需要
    sudo
    的步骤):

    现在,系统安装了
    pip
    可以用来添加软件包。通过发出
    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)
    
  • 卸载编写的python:

    $ pip list --format=freeze > packages-with-brewed-python.txt
    
    $ brew uninstall python
    
  • 我使用
    pip
    安装的每个软件包都使用
    --user
    键,因此我不再需要
    sudo
    。因此,要使用新的
    pip
    恢复包,请运行

    $ pip install --user -r packages-with-brewed-python.txt
    
  • 如果愿意,现在可以清理编写好的python包以释放一些空间:

    $ rm -rf /usr/local/lib/python2.7/site-packages/
    
  • 这种方法对我的唯一限制是,我需要安装带有
    --user
    键的软件包,这样它们只能在我的用户帐户上使用(系统范围内没有安装任何软件包)。我还使用一个没有管理员权限的用户帐户(我有一个单独的帐户),所以基本上,
    sudo
    对我来说是不可能的


    同样,这不是什么建议,但与区分安装的两个相同python版本的必要性相比,它为我省去了许多麻烦。

    这通常是一个xcode错误,与您的问题无关(当所有python包在我的机器上正常工作时,我也会遇到此错误)。您能否发布通过运行
    $python-c“import-mpi4py;print(mpi4py.\uuuuuu文件)”和
    $pip show-f mpi4py
    获得的输出?啊,好的,谢谢。我已经将这些添加到帖子中,这很奇怪-文件
    mpi4py/\uuuu init\uuuu.py
    在那里,因此模块应该是可导入的。你的python版本是什么
    $python-V
    我的python版本是
    python2.7.10
    哦,我现在看到了-你可能有两个python,系统版和酿造版。您能执行
    $python-c“import sys;print(sys.path)”
    来确认它还是证明我错了?另外,
    $echo$PATH
    也很整洁。