Символ не найден: __PyCodecInfo_GetIncrementalDecoder
Начиная с обновления от Homebrew Python 2.7.11 (от 2.7.10), я неожиданно не могу проверить свой пакет на PyPi с помощью консоли PyCharm IDE.
Запуск (в качестве «внешнего инструмента»)
python -B setup.py register -r pypitest
Теперь я получаю
Traceback (most recent call last): File "setup.py", line 22, in from setuptools import setup File "/usr/local/lib/python2.7/site-packages/setuptools/__init__.py", line 12, in from setuptools.extension import Extension File "/usr/local/lib/python2.7/site-packages/setuptools/extension.py", line 8, in from .dist import _get_unpatched File "/usr/local/lib/python2.7/site-packages/setuptools/dist.py", line 16, in from setuptools.depends import Require File "/usr/local/lib/python2.7/site-packages/setuptools/depends.py", line 6, in from setuptools import compat File "/usr/local/lib/python2.7/site-packages/setuptools/compat.py", line 17, in import httplib File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 80, in import mimetools File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/mimetools.py", line 6, in import tempfile File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/tempfile.py", line 32, in 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 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. Если я делаю это непосредственно в командной строке системы (Terminal on OS X), у меня нет проблем.
OS X 10.11.3; Homebrew Python 2.7.11; PyCharm 5.0.3
tl; dr: исправить эту проблему, выполнив одно из следующих действий:
- type
hash -r python
, OR - выйти из системы и войти в систему.
EDIT: Ответ на мой связанный вопрос дает понять, что здесь происходит. Когда вы устанавливаете новую версию python, вам может потребоваться запустить hash -r python
чтобы сообщить bash о сбросе «кэшированного» местоположения в исполняемый файл python
.
В моем случае я набирал python
, который был на моем $PATH
в /usr/local/bin/python
. Но bash
все еще использовал старое расположение кэша /usr/bin/python
. Таким образом, был sys.argv[0]
старый исполняемый файл, но новый путь был предоставлен python в sys.argv[0]
. Это означает, что старый исполняемый файл запущен, но новое значение sys.executable
привело к загрузке всех неправильных модhive (включая модуль io
).
У меня такая же проблема. Я установил python 2.7.11 через установщик с Python.org. Как ни странно, проблема, похоже, связана с некоторой тонкой разницей между тем, как OSX запускает python
когда я вызываю его из оболочки, используя полный путь против использования только слова 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 "", line 1, in File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/io.py", line 51, in 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 dylibs?
Согласно https://github.com/klen/python-mode/issues/634 :
У меня была такая же проблема, но она исправлена. В моем случае я скомпилировал python и vim с homebrew, когда PYTHON_PATH был указан и установлен в одну из моих сред dev, где у меня также были некоторые библиотеки, включая 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 (маловероятно, что в этом случае будет крик мирового масштаба и быстрое исправление, если это было так) или некорректная ошибка упаковки или версии, особенно с версией homebrew (и, возможно, некоторые связанные тоже).
Попробуйте import _io
в консоль, и если это удастся, проверьте, загружен ли он с того же пути.
Переустановите python.
brew unlink python && brew reinstall python
Защитить путь
export PYTHONPATH=$PYTHONPATH:/usr/local/bin/
BACKUP и изменить порядок файлов “paths”.
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"
У меня была такая же проблема, она успешно исправлена просто заменой файла _io.so.
sudo find / -name _io.so
скопируйте путь к файлу _io.so
который НЕ принадлежит python-2.7.11. Например, скопируйте путь _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
.
Это случилось со мной и в MacVim. Я решил это, убедившись :python print(sys.path)
использует систему Python (например, /Library/Python/2.7/...
)
Поскольку я установил MacVim через Homebrew, я просто сделал это:
-
Создайте новую оболочку, в
which python
->/usr/bin/python
. Для моего случая мне нужно было удалить строкуpyenv
из моего.bash_profile
. Если вы установили Python через Homebrew, возможно, вам захочетсяbrew unlink python
первый раз наbrew unlink python
-
brew reinstall macvim
Еще одно быстрое обходное решение, если вы не против придерживаться Python 2.7.10, – это указать путь к исполняемому файлу интерпретатора Python, который будет использоваться для virtualenv. На OSX этот путь обычно /usr/bin/python
:
virtualenv venv --python=/usr/bin/python
Невозможно добавить комментарий (?), Так что это просто для того, чтобы разделить мой exp., Downgrade to 2.7.10 works fr me.
Если ваша проблема вызвана anaconda
, нет необходимости удалять каталог //anaconda
.
Просто откройте свой файл ~/.bash_profile
, найдите строку
export PATH="//anaconda/bin:$PATH
и прокомментируйте это, затем перезапустите сеанс терминала.
Это произошло, когда я уже пытался создать venv в папке и ошибочно пытался инициализировать второй! Поэтому я просто удалил каталог venv и перезапустил команду. Скорее всего, это не ответ на это решение, но поиск моей ошибки привел меня сюда, так что это может помочь некоторым другим, кто застрял.
Я получил эту ошибку после неудачной загрузки NLTK, мне нужно было удалить anaconda:
sudo rm -rf ~/anaconda update PATH variable
Я решил эту проблему, удалив символическую ссылку, которая была в /usr/local/bin
и скопировала фактический двоичный код python, на который была указана указанная ссылка.
У меня была такая же проблема, когда я пытался использовать PyCharm. Решенный путем установки «интерпретатора python» в конфигурации проекта, чтобы указать на виртуальный env python, который я хотел использовать, который был Anaconda env. Так или иначе, на пути переводчика отсутствовала часть «анаконды» ~ /…/ anaconda /…/_ io.so. Не нужно удалять anaconda.