ChatGPT解决这个技术问题 Extra ChatGPT

未找到符号:__PyCodecInfo_GetIncrementalDecoder

从 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

已报告 as a bug
我在 OS X 上也遇到了同样的错误:在 anaconda 下 virtualenv 不适合我 - 我不需要 anaconda,但我不能install pants谁的安装程序正在使用 virtualenv。在 conda env 中从 python 2.7.11 降级到 2.7.10 后,问题解决了......
这似乎发生在每次 Python 更新之后。
在外部工具的定义中使用解释器的完整路径似乎可以解决此问题(尽管尚不清楚 why that should be necessary)。
我在尝试安装 Python 以使用 Mozilla Firefox 构建程序时遇到此错误。最受好评的答案也对我有用。

C
Community

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

输入 hash -r python,或者

注销并登录。

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

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

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

所以,对我来说,这是可行的(通过完整路径 /usr/local/bin/python 调用 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

因此,作为一种解决方法,您可以尝试做同样的事情。

在其他地方,我发布了一篇关于这种令人费解的行为的separate question。也许只是以某种方式调用 python 调用了 2.7.11 可执行文件与 2.7.10 dylibs 的某种奇怪组合?


登录和注销工作。值得注意的是,我在会话期间使用 brew 安装了 python。
一定要爱 StackOverflow!
如果 hash -r python 参数过多,您可以使用 rehash 命令。
i
ivan_pozdeev

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

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

问题解决了。罪魁祸首是从 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 中的路径。
@raxacoricofallapatorius 检查环境、可执行路径和 sys.path 是否存在差异。
我没有使用 anaconda,但此时我开始认为安装它将是我最简单的前进道路,因为自制软件没有“随时可用”的以前版本的 python
@skybondsor 我在 python.org 上找到了以前的版本页面,在这里你可以找到 2.7.10 版本的 mac 安装程序。 python version 2.7.10
这里的根本问题是 bash 的 hash 缓存可能会在您安装新版本的 python 后立即变得不正确。 (尝试 type python 来验证问题所在。)您引用的人可能通过他们描述的所有卸载/重新安装意外地解决了这个问题,但直接的解决方法是在终端中输入 hash -r python
N
Noel Ruault

重新安装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"

Y
Yanan

我遇到了同样的问题,只需替换 _io.so 文件即可成功解决。

sudo find / -name _io.so

复制 DOES NOT 属于 python-2.7.11 的 _io.so 文件的路径。例如复制python-2.7.5下的_io.so路径:/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-动态加载/_io.so

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


混合和匹配来自 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 后,我遇到了这个问题。在尝试了上述许多选项之后,这有所帮助。
k
kizzx2

这在 MacVim 中也发生在我身上。我通过确保 :python print(sys.path) 使用 system Python(例如 /Library/Python/2.7/...)解决了这个问题

由于我通过 Homebrew 安装了 MacVim,我只是通过以下方式完成了此操作:

生成一个新的 shell,其中包含 python -> /usr/bin/python。对于我的情况,我需要从 .bash_profile 中删除 pyenv 行。如果您通过 Homebrew 安装 Python,您可能需要先 brew unlink python brew reinstall macvim


这为我修好了。谢谢!
F
Fermat's Little Student

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

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

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

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


s
skeller88

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

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

t
tngn

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


M
Manfred Radlwimmer

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

sudo rm -rf ~/anaconda 
update PATH variable

E
Ethan Keller

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


C
Chris Goy

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


K
Kai

当我尝试使用 PyCharm 时,我遇到了同样的问题。通过在项目配置中设置“python解释器”指向我想要使用的python虚拟环境来解决,这是一个Anaconda env。不知何故,解释器路径缺少 ~/.../anaconda/.../_io.so 的“anaconda”部分。无需卸载 anaconda。


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅