Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Symbol not found: __PyCodecInfo_GetIncrementalDecoder

Since updating from Homebrew Python 2.7.11 (from 2.7.10) I'm suddenly unable to test register my package on PyPi from the PyCharm IDE console.

Running (as an "External Tool")

python -B setup.py register -r pypitest 

I now get

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 

I'm not sure how to proceed. I only get this issue if I execute from within my IDE's console. If I do it directly at the system command line (Terminal on OS X) I have no problems.


OS X 10.11.3; Homebrew Python 2.7.11; PyCharm 5.0.3

like image 994
orome Avatar asked Dec 20 '15 22:12

orome


2 Answers

tl;dr: Fix this issue by doing one of the following:

  • type hash -r python, OR
  • log out and log in.

EDIT: An answer to my related question makes it clear what's happening here. When you install a new version of python, you may need to run hash -r python to tell bash to reset the "cached" location to the python executable.

In my case, I was typing python, which was on my $PATH at /usr/local/bin/python. But bash was still using the old cache location /usr/bin/python. So, the old executable was called, but the new path was provided to python in sys.argv[0]. This means that the old executable was running, but the new sys.executable value caused all the wrong modules to get loaded (including the io module).


I'm having the same problem. I installed python 2.7.11 via an installer from Python.org. Strangely, the issue seems to be related to some subtle difference between how OSX launches python when I invoke it from the shell using the full path vs. using just the word python.

So, for me, this works (invoking python via the full path /usr/local/bin/python):

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

... but this doesn't:

$ 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 

So, as a workaround, you can try doing the same thing.

Elsewhere, I've posted a separate question about this puzzling behavior. Maybe somehow merely calling python invokes some strange mix of the 2.7.11 executable with the 2.7.10 dylibs??

like image 110
Stuart Berg Avatar answered Oct 14 '22 03:10

Stuart Berg


According to https://github.com/klen/python-mode/issues/634:

I had the same issue, but successfully fixed. In my case I compiled python and vim with homebrew, when PYTHON_PATH has been specified and set to one of my dev environments, where I also had some libraries, including io. Workaround was simple: open new terminal, make sure that you do not have custom PYTHON_PATH, uninstall python, uninstall vim. Reinstall both of them.

and

Problem solved.

Culprit is the update from python 2.7.10 to 2.7.11.

If you are using conda package control, simply run "conda install python=2.7.10" will solve this problem.

This doesn't give the root cause though. Since this happens with _io, this looks like a bug in python 2.7.11 (unlikely, there would be a world-scale outcry and a prompt fix if it was) or some packaging bug or version mismatch specifically with the homebrew version (and maybe some related ones, too).

Try to import _io in the console and if it succeeds, check if it was loaded from the same path.

like image 20
ivan_pozdeev Avatar answered Oct 14 '22 01:10

ivan_pozdeev