Символ не найден: __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 <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. Если я делаю это непосредственно в командной строке системы (Terminal on OS X), у меня нет проблем.
OS X 10.11.3; Homebrew Python 2.7.11; PyCharm 5.0.3
Ответы
Ответ 1
tl; dr: устраните эту проблему, выполнив одно из следующих действий:
- type
hash -r python
, OR
- выйти и войти в систему.
EDIT: Ответ на мой вопрос дает понять, что происходит здесь. Когда вы устанавливаете новую версию python, вам может потребоваться запустить hash -r python
, чтобы сообщить bash to reset "кэшированное" местоположение исполняемому файлу python
.
В моем случае я набрал python
, который был на моем $PATH
в /usr/local/bin/python
. Но bash
все еще использовал старое расположение кэша /usr/bin/python
. Итак, был выдан старый исполняемый файл, но новый путь был предоставлен python в sys.argv[0]
. Это означает, что старый исполняемый файл запущен, но новое значение sys.executable
вызвало загрузку всех неправильных модулей (включая модуль 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 "<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 dylibs??
Ответ 2
Согласно 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
в консоли, и если он преуспеет, проверьте, загружен ли он с того же пути.
Ответ 3
Переустановите 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"
Ответ 4
У меня была такая же проблема, она успешно исправлена просто заменой файла _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
, который вы только что нашли.
Ответ 5
Это случилось со мной и в MacVim. Я решил это, убедившись, что :python print(sys.path)
использует системный Python (например, /Library/Python/2.7/...
)
Поскольку я установил MacVim через Homebrew, я просто сделал это:
Ответ 6
Невозможно добавить комментарий (?), так что это просто для того, чтобы разделить мой exp., downgrade до 2.7.10 works fr me.
Ответ 7
Если ваша проблема вызвана anaconda
, нет необходимости удалять каталог //anaconda
.
Просто откройте ~/.bash_profile
, найдите строку
export PATH="//anaconda/bin:$PATH
и прокомментируйте это, затем перезапустите сеанс терминала.
Ответ 8
Еще одно быстрое обходное решение, если вы не против придерживаться Python 2.7.10, - это указать путь к исполняемому файлу интерпретатора Python, который будет использоваться для virtualenv. В OSX этот путь обычно /usr/bin/python
:
virtualenv venv --python=/usr/bin/python
Ответ 9
Это произошло, когда я уже пытался создать venv в папке и ошибочно пытался инициализировать второй! Поэтому я просто удалил каталог venv и перезапустил команду. Скорее всего, это не ответ на это решение, но поиск моей ошибки привел меня сюда, так что это может помочь некоторым другим, кто застрял.
Ответ 10
Я получил эту ошибку после неудачной загрузки NLTK, мне нужно было удалить anaconda:
sudo rm -rf ~/anaconda
update PATH variable
Ответ 11
Я решил эту проблему, удалив символическую ссылку, которая находилась в /usr/local/bin
, и скопировала фактический бинарный код python, на который была указана указанная ссылка.
Ответ 12
У меня была такая же проблема, когда я пытался использовать PyCharm. Решенный путем установки "интерпретатора python" в конфигурации проекта, чтобы указать на виртуальный env python, который я хотел использовать, который был Anaconda env. Так или иначе, на пути переводчика отсутствовала часть "анаконды" ~/.../anaconda/.../_ io.so. Нет необходимости удалять anaconda.