Символ не знайдено: __PyCodecInfo_GetIncrementalDecoder


74

З моменту оновлення з Homebrew Python 2.7.11 (з 2.7.10) я раптом не можу перевірити реєстрацію свого пакету на PyPi з консолі ID PyCharm.

Запуск (як "Зовнішній інструмент")

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; Homebrew Python 2.7.11; PyCharm 5.0.3


Повідомляється як про помилку .
orome

2
У мене була та ж помилка, також в OS X: virtualenv не працював у мене під anaconda - мені це не потрібно було б з anaconda, але я не міг встановити штани , інсталятор яких використовує virtualenv. Після зниження версії python 2.7.11 до 2.7.10 в conda env, проблема була вирішена ...
Сергій Оршанський

1
Здається, це відбувається після кожного оновлення Python.
orome

Використання повного шляху до інтерпретатора у визначенні зовнішнього інструменту, здається, це виправляє (хоча незрозуміло, чому це потрібно ).
orome

Я отримав цю помилку при спробі встановити Python для використання програми збірки Mozilla Firefox. Найголосніша відповідь спрацювала і на мене.
nc.

Відповіді:


199

tl; dr: Виправте цю проблему, виконавши одну з таких дій:

  • типу hash -r python, АБО
  • вийти і увійти.

EDIT: Відповідь на моє відповідне запитання дає зрозуміти, що тут відбувається. Коли ви встановлюєте нову версію python, вам може знадобитися запустити, hash -r pythonщоб сказати bash скинути "кешоване" розташування до pythonвиконуваного файлу.

У моєму випадку я друкував python, що було на моєму $PATHat /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 ??


3
вхід та вихід вийшли. Примітно, що я встановив python за допомогою brew під час сеансу.
GiriB


1
Потрібно любити StackOverflow !!
Сріні

4
якщо hash -r pythonговорить занадто багато аргументів, ви можете використовувати rehashкоманду.
Сізіф

21

Відповідно до https://github.com/klen/python-mode/issues/634 :

У мене була та ж проблема, але успішно виправлена. У моєму випадку я скомпілював python і vim з homebrew, коли PYTHON_PATH був вказаний і встановлений в одне з моїх середовищ dev, де я також мав деякі бібліотеки, включаючи 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наявність відмінностей.
ivan_pozdeev

2
Я не використовую анаконду, на даний момент я починаю думати, що встановлення її буде найлегшим моїм шляхом вперед, оскільки домородна мова не має попередніх версій python "на
виході

1
@skybondsor Я знайшов попередню сторінку випусків на python.org, тут ви можете знайти програму встановлення mac для версії 2.7.10. версія python 2.7.10
Codious-JR

3
Основна проблема тут полягає в тому, що hashкеш-пам'ять bash може стати неправильною відразу після встановлення нової версії python. (Спробуйте 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

скопіюйте шлях до _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щойно знайдений.


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 - 2.7.10 (як і інші залежні бібліотеки використовують 2.7.10), так що після оновлення до новітньої Anaconda я не зміг ним скористатися. Поки я чекаю на офіційне виправлення помилок Anaconda, мені потрібно запустити кілька сценаріїв conda. Тому я вирішив використати цей грубий спосіб тимчасово вирішити проблему.
Yanan

Після встановлення Dato Launcher у мене виникла ця проблема. Спробувавши багато варіантів вище, це допомогло.
gogasca

3

Це трапилось і зі мною в MacVim. Я вирішив це, переконавшись :python print(sys.path), що використовую системний Python (наприклад /Library/Python/2.7/...)

Оскільки я встановив MacVim через Homebrew, я просто зробив це за допомогою:

  1. Породжує нову оболонку, яка мала which python-> /usr/bin/python. Для мого випадку мені потрібно було видалити pyenvрядок з мого .bash_profile. Якщо ви встановили Python через Homebrew, ви можете brew unlink pythonспершу

  2. brew reinstall macvim


Це мені це виправило. Дякую!
Джеймс Маклафлін,

3

Якщо вашу проблему спричинено anaconda, видаляти //anacondaкаталог не потрібно.

Просто відкрийте свій ~/.bash_profile, знайдіть рядок

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

і прокоментуйте це, а потім перезапустіть сеанс терміналу.


3

Ще одним швидким обхідним шляхом, якщо ви не проти дотримуватися Python 2.7.10, є вказання шляху до виконуваного файлу інтерпретатора Python, який буде використовуватися для virtualenv. На 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 і повторно запустив команду. Швидше за все, це не відповідь на це рішення, але пошук моєї помилки привів мене сюди, тому це може допомогти деяким іншим, хто застряг.


0

Я вирішив цю проблему, видаливши символічне посилання, яке було в, /usr/local/binі скопіювавши фактичний двійковий файл python, на який вказувало вказане посилання.


0

У мене була та сама проблема, коли я намагався використовувати PyCharm. Вирішено шляхом встановлення "інтерпретатора python" у конфігурації проекту, щоб вказувати на віртуальну env python, яку я хотів використати, яка була Anaconda env. Якось у шляху інтерпретатора не вистачало частини "anaconda" у ~ /.../ anaconda /.../_ io.so. Не потрібно видаляти анаконду.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.