webentwicklung-frage-antwort-db.com.de

Symbol nicht gefunden: __PyCodecInfo_GetIncrementalDecoder

Seit dem Update von Homebrew Python 2.7.11 (von 2.7.10)) kann ich mein Paket nicht mehr über die PyCharm IDE Konsole auf PyPi registrieren.

Laufen (als "externes Tool")

python -B setup.py register -r pypitest

Ich verstehe jetzt

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

Ich bin nicht sicher, wie ich vorgehen soll. Ich bekomme dieses Problem nur, wenn ich es über die Konsole meiner IDE ausführe. Wenn ich es direkt auf der System-Kommandozeile (Terminal unter OS X) mache, habe ich keine Probleme.


OS X 10.11.3; Homebrew Python 2.7.11; PyCharm 5.0.3

73
orome

tl; dr: Beheben Sie dieses Problem, indem Sie einen der folgenden Schritte ausführen:

  • art hash -r python, ODER
  • ausloggen und einloggen.

EDIT: Eine Antwort auf meine verwandte Frage macht deutlich, was hier passiert. Wenn Sie eine neue Version von Python installieren, müssen Sie möglicherweise hash -r python, um bash anzuweisen, den "zwischengespeicherten" Speicherort auf die ausführbare Datei python zurückzusetzen.

In meinem Fall habe ich python eingegeben, das auf meinem $PATH beim /usr/local/bin/python. Aber bash benutzte immer noch den alten Cache-Speicherort /usr/bin/python. Also wurde die alte ausführbare Datei aufgerufen, aber der neue Pfad wurde für python in sys.argv[0]. Dies bedeutet, dass die alte ausführbare Datei ausgeführt wurde, aber die neue sys.executable value hat dazu geführt, dass alle falschen Module geladen wurden (einschließlich des io Moduls).


Ich habe das gleiche Problem. Ich habe python 2.7.11 über ein Installationsprogramm von Python.org installiert. Seltsamerweise scheint das Problem mit einem subtilen Unterschied zu zusammenhängen, wie OSX python startet, wenn ich es aufrufe Die Shell verwendet den vollständigen Pfad und nicht nur das Wort python.

Für mich funktioniert das (Aufrufen von python über den vollständigen Pfad /usr/local/bin/python):

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

... aber das tut es nicht:

$ 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

Um dies zu umgehen, können Sie versuchen, dasselbe zu tun.

An anderer Stelle habe ich eine separate Frage zu diesem rätselhaften Verhalten gepostet. Vielleicht ruft das bloße Aufrufen von python eine seltsame Mischung der ausführbaren Datei 2.7.11 mit den Dylibs 2.7.10 auf?

199
Stuart Berg

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

Ich hatte das gleiche Problem, aber erfolgreich behoben. In meinem Fall habe ich python und vim with homebrew kompiliert, wenn PYTHON_PATH angegeben und auf eine meiner Entwicklungsumgebungen festgelegt wurde, in der ich auch einige Bibliotheken hatte, einschließlich io. Problemumgehung war einfach: open new Stellen Sie sicher, dass Sie kein benutzerdefiniertes PYTHON_PATH haben, deinstallieren Sie Python und deinstallieren Sie vim. Installieren Sie beide erneut.

und

Problem gelöst.

Schuld ist das Update von python 2.7.10 auf 2.7.11.

Wenn Sie conda package control verwenden, führen Sie einfach "conda install python = 2.7.10" aus, um dieses Problem zu beheben.

Dies gibt jedoch nicht die eigentliche Ursache. Da dies passiert mit _io, dies sieht aus wie ein Fehler in python 2.7.11 (unwahrscheinlich, dass es einen weltumspannenden Aufschrei und eine sofortige Fehlerbehebung geben würde, wenn dies der Fall wäre) oder ein Paketierungsfehler oder eine Versionsinkongruenz speziell mit die Homebrew-Version (und vielleicht auch einige verwandte).

Versuchen zu import _io in der Konsole, und überprüfen Sie, ob es aus demselben Pfad geladen wurde, wenn es erfolgreich ist.

21
ivan_pozdeev

Installieren Sie Python neu.

brew unlink python && brew reinstall python

Den Weg sichern

export PYTHONPATH=$PYTHONPATH:/usr/local/bin/

BACKUP und Ändern Sie die Reihenfolge der "Pfade" -Datei.

Sudo nano /etc/paths

es scheint, die Reihenfolge der Pfade ist entscheidend, um python richtig auszuführen. In meinem Fall war das Ergebnis:

#Sudo nano /etc/paths
  /usr/bin  
  /usr/local/bin
  /bin
  /usr/sbin
  /sbin

Auf meinem Mac ist der Pfad so.

$ which python
    /usr/local/bin/python

Jetzt kann ich beides ausführen:

$ /usr/local/bin/python -c "import io"
$ python -c "import io"
11
Noel Ruault

Ich hatte das gleiche Problem. Es wurde erfolgreich behoben, indem nur die Datei _io.so ersetzt wurde.

Sudo find / -name _io.so

kopieren Sie den Pfad des _io.so Datei, die NICHT zu Python-2.7.11 gehört. Kopieren Sie beispielsweise den Pfad von _io.so, der sich unter python-2.7.5 befindet: /usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib- dynload/_io.so

Ersetze das /usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_io.so Datei mit dem _io.so, die Sie gerade gefunden haben.

6
Yanan

Dies ist mir auch in MacVim passiert. Ich habe es gelöst, indem ich sicherstellte, dass :python print(sys.path)system Python verwendet (z. B. /Library/Python/2.7/...)

Da ich MacVim über Homebrew installiert habe, habe ich das folgendermaßen gemacht:

  1. Erstellen Sie eine neue Shell mit which python -> /usr/bin/python. In meinem Fall musste ich die Zeile pyenv aus meinem .bash_profile Entfernen. Wenn Sie Python über Homebrew installiert haben, möchten Sie möglicherweise zuerst brew unlink python

  2. brew reinstall macvim

3
kizzx2

Eine andere schnelle Lösung, wenn Sie nichts dagegen haben, bei Python 2.7.10 zu bleiben, ist die Angabe des Pfads der Python ausführbaren Datei, die für die virtuelle Umgebung verwendet wird Unter OSX lautet dieser Pfad normalerweise /usr/bin/python:

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

Wenn Ihr Problem durch anaconda verursacht wird, muss das Verzeichnis //anaconda Nicht entfernt werden.

Öffne einfach deinen ~/.bash_profile Und finde die Zeile

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

und kommentieren Sie es aus, und starten Sie dann Ihre Terminalsitzung neu.

2
Will

Ich habe diesen Fehler nach einem fehlgeschlagenen NLTK-Download erhalten. Ich musste anaconda deinstallieren:

Sudo rm -rf ~/anaconda 
update PATH variable
1
user260826

Kann keinen Kommentar (?) Hinzufügen, daher funktioniert das Herabstufen auf 2.7.10 nur, um meine Erfahrung mitzuteilen.

1
tngn

Dies geschah, als ich bereits versucht hatte, ein Venv in einem Ordner zu erstellen und versehentlich versuchte, ein zweites zu initialisieren! Also habe ich gerade das venv-Verzeichnis entfernt und den Befehl erneut ausgeführt. Sehr wahrscheinlich ist dies nicht die Antwort auf diese Lösung, aber die Suche nach meinem Fehler hat mich hierher geführt, sodass es einigen anderen helfen kann, die nicht weiterkommen.

0
Ethan Keller

Ich hatte das gleiche Problem, als ich versuchte, PyCharm zu verwenden. Gelöst durch Setzen von "Python-Interpreter" in der Projektkonfiguration, um auf die python virtuelle Umgebung zu verweisen, die ich verwenden wollte, eine Anaconda-Umgebung. Irgendwie fehlte dem Interpreter-Pfad der "Anaconda" -Teil von ~ /.../anaconda/.../_io.so. Keine Notwendigkeit, anaconda zu deinstallieren.

0
Kai

Ich habe dieses Problem gelöst, indem ich den symbolischen Link in /usr/local/bin Entfernt und die tatsächliche python binary, auf die dieser Link verwies) kopiert habe.

0
Chris Goy