找不到符号:__PyCodecInfo_GetIncrementalDecoder

自从从Homebrew Python 2.7.11(从2.7.10)更新以来,我突然无法testing从PyCharm IDE控制台在PyPi上注册我的软件包。

运行(作为“外部工具”)

python -B setup.py register -r pypitest 

我现在得到

 Traceback (most recent call last): File "setup.py", line 22, in <module> from setuptools import setup File "/usr/local/lib/python2.7/site-packages/setuptools/__init__.py", line 12, in <module> from setuptools.extension import Extension File "/usr/local/lib/python2.7/site-packages/setuptools/extension.py", line 8, in <module> from .dist import _get_unpatched File "/usr/local/lib/python2.7/site-packages/setuptools/dist.py", line 16, in <module> from setuptools.depends import Require File "/usr/local/lib/python2.7/site-packages/setuptools/depends.py", line 6, in <module> from setuptools import compat File "/usr/local/lib/python2.7/site-packages/setuptools/compat.py", line 17, in <module> import httplib File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 80, in <module> import mimetools File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/mimetools.py", line 6, in <module> import tempfile File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/tempfile.py", line 32, in <module> import io as _io File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/io.py", line 51, in <module> import _io ImportError: dlopen(/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_io.so, 2): Symbol not found: __PyCodecInfo_GetIncrementalDecoder Referenced from: /usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_io.so Expected in: flat namespace in /usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_io.so Process finished with exit code 1 

我不知道如何继续。 我只有在我的IDE控制台执行时才会遇到这个问题。 如果我直接在系统命令行(OS X上的terminal)上执行,我没有问题。


OS X 10.11.3; Homebrew Python 2.7.11; PyCharm 5.0.3

tl; dr:通过执行以下操作之一来解决此问题:

  • hash -r python ,OR
  • 注销并login。

编辑:我的相关问题的答案清楚这里发生了什么事情。 当你安装一个新版本的python时,你可能需要运行hash -r python来告诉bash重置python可执行文件的“caching”位置。

在我的情况下,我正在inputpython ,它位于/usr/local/bin/python $PATH中。 但bash仍然使用旧的caching位置/usr/bin/python 。 所以,旧的可执行文件被调用,但新的path被提供给python在sys.argv[0] 。 这意味着旧的可执行文件正在运行,但新的sys.executable值导致所有错误的模块被加载(包括io模块)。


我有同样的问题。 我通过Python.org的安装程序安装了python 2.7.11。 奇怪的是,这个问题似乎与OSX启动python时使用完整path而不是使用python这个词从shell调用它之间的细微差别有关。

所以,对我来说,这工作(通过完整path/usr/local/bin/python调用/usr/local/bin/python ):

 $ which python /usr/local/bin/python $ /usr/local/bin/python -c "import io" $ 

…但是这不:

 $ python -c "import io" Traceback (most recent call last): File "<string>", line 1, in <module> File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/io.py", line 51, in <module> import _io ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_io.so, 2): Symbol not found: __PyCodecInfo_GetIncrementalDecoder Referenced from: /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_io.so Expected in: flat namespace in /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_io.so 

所以,作为一个解决方法,你可以尝试做同样的事情。

在其他地方,我已经发布了一个关于这个令人费解的行为的单独的问题 。 也许不知何故,只是调用python调用2.7.11 dylibs的2.7.11可执行文件的一些奇怪的组合?

根据https://github.com/klen/python-mode/issues/634

我有同样的问题,但成功修复。 在我的情况下,我用自制软件编译了python和vim,当PYTHON_PATH被指定并设置为我的一个开发环境时,我也有一些库,包括io。 解决方法很简单:打开新的terminal,确保你没有自定义的PYTHON_PATH,卸载python,卸载vim。 重新安装它们。

问题解决了。

罪魁祸首是从Python 2.7.10到2.7.11的更新。

如果你使用conda包控制,只需运行“conda install python = 2.7.10”就可以解决这个问题。

这虽然没有给出根本原因。 由于_io发生这种情况,这看起来像Python 2.7.11中的一个bug(不太可能会出现世界范围内的喧嚣和提示性修复),或者某些包装错误或版本与自制版本不匹配一些相关的)。

尝试在控制台中import _io ,如果成功,请检查它是否从相同的path加载。

重新安装python。

 brew unlink python && brew reinstall python 

确保path

 export PYTHONPATH=$PYTHONPATH:/usr/local/bin/ 

备份并更改“path”文件的顺序。

 sudo nano /etc/paths 

看来,path的顺序,正确运行python是决定性的。 就我而言,结果是:

 #sudo nano /etc/paths /usr/bin /usr/local/bin /bin /usr/sbin /sbin 

在我的Mac上,path是这样的。

 $ which python /usr/local/bin/python 

现在我可以运行两个:

 $ /usr/local/bin/python -c "import io" $ python -c "import io" 

我有同样的问题,它只是通过replace_io.so文件成功解决。

 sudo find / -name _io.so 

复制属于python-2.7.11的_io.so文件的path。 例如,复制python-2.7.5下的_io.sopath:/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib- dynload / _io.so

用刚find的_io.soreplace/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_io.so文件。

这发生在我和MacVim中。 我解决了这个问题,确保:python print(sys.path)使用系统Python (例如/Library/Python/2.7/...

由于我通过Homebrew安装了MacVim,我只是这样做了:

  1. 产生一个具有which python – > /usr/bin/python的新shell。 对于我的情况,我需要从我的.bash_profile删除pyenv行。 如果你通过Homebrew安装了Python,你可能需要首先brew unlink python

  2. brew reinstall macvim

不能添加评论(?),所以这只是分享我的exp,降级到2.7.10工程fr我。

当我已经尝试在一个文件夹中创build一个venv,并错误地尝试初始化第二个! 所以我刚刚删除Venv目录并重新运行该命令。 很可能这不是解决scheme的答案,但是查找我的错误将我带到这里,所以它可能会帮助其他一些卡住的人。

NLTK下载失败后我得到这个错误,我需要卸载anaconda:

 sudo rm -rf ~/anaconda update PATH variable 

如果你的问题是由anaconda引起的,那么不必删除//anaconda目录。

只要打开你的~/.bash_profile ,find这一行

 export PATH="//anaconda/bin:$PATH 

并将其注释掉,然后重新启动terminal会话。

如果您不介意粘贴Python 2.7.10,另一个快速解决方法是指定将用于virtualenv的Python解释器可执行文件的path。 在OSX上,该path通常是/usr/bin/python

 virtualenv venv --python=/usr/bin/python 

我通过删除/usr/local/bin的符号链接并复制实际的python二进制文件来解决这个问题。

当我尝试使用PyCharm时,我遇到了同样的问题。 通过在项目configuration中将“python interpreter”设置为指向我想使用的python虚拟env解决,这是一个Anaconda env。 不知何故解释器path缺less〜/…/ anaconda /…/_ io.so的“anaconda”部分。 无需卸载anaconda。