找不到符号:__ PyCodecInfo_GetIncrementalDecoder


74

自从Homebrew Python 2.7.11(从2.7.10开始)更新以来,我突然无法从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上的终端)上执行此操作,则不会有问题。


OS X 10.11.3; 自制Python 2.7.11; PyCharm 5.0.3


报告为错误
orome

2
我在OS X上也遇到了同样的错误:anaconda下的virtualenv不适用于我-anaconda不需要它,但是我无法安装安装程序正在使用virtualenv的裤子。在conda env中从python 2.7.11降级到2.7.10后,问题解决了……
Sergey

1
这似乎是在每次Python更新后发生的。
orome

在外部工具的定义中使用解释器的完整路径似乎可以解决此问题(尽管尚不清楚为什么必须这样做)。
orome

我在尝试安装Python以使用Mozilla Firefox构建程序时遇到此错误。最高评价的答案也对我有用。
nc。

Answers:


199

tl; dr:请执行以下一项操作来解决此问题:

  • 类型hash -r python
  • 注销并登录。

编辑:对我相关问题的回答清楚了这里发生了什么。当您安装新版本的python时,可能需要运行hash -r python以告诉bash将“缓存”位置重置为python可执行文件。

就我而言,我正在打字python,这是我$PATH/usr/local/bin/python。但是bash仍在使用旧的缓存位置/usr/bin/python。因此,旧的可执行文件被调用,而的路径已提供给python sys.argv[0]。这意味着旧的可执行文件正在运行,但是新的sys.executable值导致所有错误的模块(包括io模块)都被加载。


我有同样的问题。我通过Python.org的安装程序安装了python 2.7.11。奇怪的是,该问题似乎与python我使用完整路径从shell调用外壳与仅使用单词时OSX启动方式之间的细微差别有关python

因此,对我来说,这可行(通过完整路径调用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可执行文件与2.7.10 dylib的某种奇怪组合?


3
登录和注销工作。值得注意的是,我在会话期间使用brew安装了python。
GiriB '16


1
要爱StackOverflow!
斯里尼'16

4
如果hash -r python说参数太多,则可以使用rehash命令。
西西弗斯(Sisyphus)

21

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

我遇到了同样的问题,但是成功解决了。在我的情况下,当已指定PYTHON_PATH并将其设置为我的开发环境之一时,我使用自制软件编译了python和vim,其中我还拥有一些库,包括io。解决方法很简单:打开新终端,确保没有自定义PYTHON_PATH,卸载python,卸载vim。重新安装它们。

问题解决了。

Culprit是从python 2.7.10到2.7.11的更新。

如果您使用的是conda软件包控件,只需运行“ conda install python = 2.7.10”即可解决此问题。

但是,这并没有给出根本原因。由于发生这种情况_io,这看起来像是python 2.7.11中的错误(不太可能出现世界范围的强烈抗议,如果有的话立即进行修复),或者某些包装错误或版本与自制版本不匹配(也许有些相关的)。

尝试import _io在控制台中进行操作,如果成功,请检查是否从同一路径加载了它。


奇怪的是,只有在IDE的控制台中执行时,才会出现此问题。如果直接在系统命令行(OS X上的终端)上执行此操作,则不会有问题。我怀疑我的IDE中的路径。
orome

@raxacoricofallapatorius检查环境,可执行路径以及sys.path是否存在差异。
ivan_pozdeev 2015年

2
我没有使用anaconda,这时我开始认为安装它是我最简单的前进方法,因为自制软件没有python的先前版本“ on tap”
skybondsor 2015年

1
@skybondsor我在python.org上找到了以前的发行版页面,在这里您可以找到版本2.7.10的mac安装程序。python版本2.7.10
Codious-JR

3
这里的根本问题是,hash在安装新版本的python之后,bash的缓存可能立即变得不正确。(尝试type python验证是否有问题。)您所引用的人员可能通过他们描述的所有卸载/重新安装来意外修复了此问题,但直接的解决方法是键入hash -r python终端。
斯图尔特·伯格

12

重新安装python。

brew unlink python && brew reinstall python

确保路径

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

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

sudo nano /etc/paths

看来,路径顺序对正确运行python至关重要。就我而言,结果是:

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

在我的Mac上,路径是这样的。

$ which python
    /usr/local/bin/python

现在我可以同时运行:

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

6

我有同样的问题,只需替换_io.so文件就可以成功解决。

sudo find / -name _io.so

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

用刚找到的替换/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_io.so文件_io.so


1
混合和匹配Python 2.7.11和系统Python中的扩展模块(在最新系统上为2.7.10)是解决此问题的一种非常粗糙的方法。根本问题是Python 2.7.10试图导入一个属于2.7.11的模块。该符号在2.7.11中定义,但在2.7.10中未定义。更好的解决方案是理解为什么根本要调用Python 2.7.10。
蒂姆·史密斯

谢谢蒂姆。使用Anaconda时遇到了这个问题。Anaconda2.4.1具有scipy-0.16.0作为依赖项之一,而scipy-0.16.0需要python 2.7.11。Anaconda中的默认python是2.7.10(以及其他依赖库使用2.7.10),因此升级到最新的Anaconda后,我无法使用它。在等待Anaconda的官方错误修复时,我需要运行几个conda脚本。因此,我决定使用这种粗略的方法暂时解决问题。
延安

安装Dato Launcher后,我遇到了这个问题。尝试了上面的许多选项后,这有所帮助。
gogasca

3

MacVim中也发生了这种情况。我通过确保:python print(sys.path)使用系统Python(例如/Library/Python/2.7/...)解决了它

由于我是通过Homebrew安装MacVim的,因此可以通过以下方式做到这一点:

  1. 生成一个具有which python->的新外壳/usr/bin/python。对于我来说,我需要pyenv从我的工具中删除该行.bash_profile。如果您是通过Homebrew安装的,则可能需要brew unlink python先安装Python

  2. brew reinstall macvim


这为我解决了。谢谢!
詹姆斯·麦克劳克林

3

如果您的问题是由引起的anaconda,则无需删除//anaconda目录。

只需打开您的~/.bash_profile,找到线

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

并注释掉它,然后重新启动您的终端会话。


3

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

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

1

无法添加评论(?),所以这仅仅是为了分享我的经验,降级到2.7.10对我有效。


1

NLTK下载失败后出现此错误,我需要卸载anaconda:

sudo rm -rf ~/anaconda 
update PATH variable

0

当我已经尝试在文件夹中创建venv并错误地尝试初始化第二个venv时,发生了这种情况!因此,我只是删除了venv目录并重新运行了该命令。这很可能不是该解决方案的答案,但是搜索我的错误将我带到了这里,因此它可能会帮助其他陷入困境的人。


0

我通过删除其中的符号链接/usr/local/bin并复制该链接所指向的实际python二进制文件来解决此问题。


0

当我尝试使用PyCharm时,我遇到了同样的问题。通过在项目配置中设置“ python解释器”来解决,以指向我要使用的python虚拟环境,这是Anaconda环境。解释器路径以某种方式缺少〜/.../ anaconda /.../_ io.so的“ anaconda”部分。无需卸载anaconda。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.