Ist pyenv kaputt? Python 3.x verweist beim Start aufgrund eines PYTHONPATH-Fehlers auf das 2.x-Modul

Der Anfang der Sache

Ich verwalte Python in der "pyenv" -Umgebung (um genau zu sein "pyenv-virtualenv"). Ich verwende seit einiger Zeit JetBrains-IDEs wie "PyCharm" und "IntelliJ IDEA", aber als IntelliJ IDEA eine eigene virtuelle Python-Umgebung einführte (installiert in einem Verzeichnis namens "$ HOME / pyenv4intelliJ") Es scheint die Python-Umgebung unter Pyenv zu verschmutzen und es startet nicht.

Anscheinend ist das Modul (Pfad, das angibt), das beim Start von Python geladen wird, seltsam. Also, diesmal der Artikel, um dies zu beheben und wieder normal zu machen. Inhaltlich

Es ist hier. Im Grunde geht es um Python, aber es scheint, dass ein wenig Wissen über Homebrew und Pyenv einfließen wird. Ich habe Probleme mit ähnlichen Fehlermeldungen in den Foren von Python und PyCharm gesehen, daher sollte es einige Leute geben, die Probleme mit diesem Fehler haben ...? Also werde ich kommen.

Aufklärung von Fehlerdetails

Fehlermeldung 1

Schauen wir uns zunächst die Python-Konsole in PyCharm und die Fehlermeldung beim Aufrufen von Python 3 vom Terminal aus an.

Failed to import the site module
Your PYTHONPATH points to a site-packages dir for Python 2.x bet you are running Python 3.x!
   #Bei Ausführung von PyCharm ↓
     PYTHONPATH is currently: "/Applications/PyCharm.app/Contents/helpers/pydev"
   #Bei Ausführung vom Terminal ↓
     PYTHONPATH is currently: "$HOME/.pyenv/versions/3.5.1/bin/python"
     You should `unset PYTHONPATH` to fix this.

Fehlermeldung 2

Als ich dann damit herumspielte, änderte sich die Fehlermeldung wie folgt.

$python
Error in sitecustomize; set PYTHONVERBOSE for traceback:
KeyError: 'PYTHONPATH'
Python 3.5.1 (default, May 19 2016, 22:59:42) 
[GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> #Dadurch wird eine interaktive Oberfläche gestartet

Übrigens scheint PYTHONVERBOSE dasselbe zu sein wie mit $ python -v mit Optionen zu beginnen. Es wird beim Start zurückverfolgt.

Umfrageergebnisse

Wenn ich die erste Fehlermeldung lese, sieht es wie eine Warnung aus, dass ich 3.x ausführe, aber 2.x Site-Pakete (Module?) Lade. Die zweite Fehlermeldung scheint zu sein, dass ein Fehler in "sitecustomize.py" aufgetreten ist und "PYTHONPATH" seltsam ist. (Zusammenfassend war dies die gleiche Ursache.)

Zur Zeit über site.py

Lassen Sie uns nun erklären, was das Modul site.py, sitecustomize.py und site-packages sind, die zuvor herausgekommen sind. (Sie können es überspringen und lesen)

  1. Der Pfad, den Python beim Laden eines Moduls sieht, wird in sys.path festgelegt
  2. Python setzt "sys.path", indem es "site.py" beim Start ausführt
  3. Ist es wie eine Option? : Die lokale Pfadeinstellung für jedes Projekt wird dem Pfad hinzugefügt, indem "sitecustomize.py" oder "usersitecustomize.py" ausgeführt wird

Dieser Bereich wird auf der folgenden Seite ausführlich erläutert.

Identifizieren Sie die Ursache mit "Brauarzt"

Ich habe jedoch nicht "PYTHONPATH" festgelegt, und selbst wenn ich ">>> import site; site.USERSITE" über die interaktive Oberfläche ausführe und den in "site.py" festgelegten Pfad überprüfe, ist dies anders. nicht seltsam. Jedoch……

$ python
>>> import sys
>>> sys.path
>>> sys.path
['', '$HOME/.pyenv/versions/3.5.1/lib/python35.zip',
 '$HOME/.pyenv/versions/3.5.1/lib/python3.5',
 '$HOME/.pyenv/versions/3.5.1/lib/python3.5/plat-darwin',
 '$HOME/.pyenv/versions/3.5.1/lib/python3.5/lib-dynload',
 '$HOME/.local/lib/python3.5/site-packages',
 '/usr/local/lib/python2.7/site-packages',
 '$HOME/.pyenv/versions/3.5.1/lib/python3.5/site-packages']

Was? Oh? ?? ?? Aus irgendeinem Grund beziehe ich mich auf den Standardpfad python2.x des Mac-Systems! Das ist die Ursache! !! !! Aber warum beziehen Sie sich auf den 2.x-Pfad ...?

Dann versuchte ich beiläufig "$ Brew Doctor".

Warning: python is symlinked to python3
This will confuse build scripts and in general lead to subtle breakage.

Warning: "config" scripts exist outside your system or Homebrew directories.
`./configure` scripts often look for *-config scripts to determine if
software packages are installed, and what additional flags to use when
compiling and linking.

Having additional scripts in your path can confuse software installed via
Homebrew if the config script overrides a system or Homebrew provided
script of the same name. We found the following "config" scripts:
    $HOME/.pyenv/shims/python-config
    $HOME/.pyenv/shims/python3-config
    $HOME/.pyenv/shims/python3.5-config
    $HOME/.pyenv/shims/python3.5m-config
Error in sitecustomize; set PYTHONVERBOSE for traceback:
KeyError: 'PYTHONPATH'

Warning: Your default Python does not recognize the Homebrew site-packages
directory as a special site-packages directory, which means that .pth
files will not be followed. This means you will not be able to import
some modules after installing them with Homebrew, like wxpython. To fix
this for the current user, you can run:
  mkdir -p $HOME/.local/lib/python3.5/site-packages
  echo 'import site; site.addsitedir("/usr/local/lib/python2.7/site-packages")' >> $HOME/.local/lib/python3.5/site-packages/homebrew.pth

Es ist ein bisschen lang, aber als ich den englischen Text las,

Your default Python does not recognize the Homebrew site-packages directory
as a special site-packages directory, # ... (Folgendes wird weggelassen)

…… Der Standard-Python (= python3.5.1 unter pyenv) scheint keine Site-Pakete laden zu können, die von homebrew erstellt wurden (= wahrscheinlich in einem Verzeichnis unter $ HOME / .pyenv erstellt). Es scheint eine Sache zu sein.

Schätze ich. Ja ich weiß.

Zusammenfassung der Ursachenuntersuchung und wie man sie behebt

Wenn Sie den Pfad, den Sie mit "import sys" überprüft haben, mit der Python-bezogenen Warnung kombinieren, die mit "Brew Doctor" ausgegeben wurde, sehen Sie Folgendes.

  1. Der von Python → Normal aufgerufene Pfad wird aus site.py festgelegt
  2. Vom Homebrew festgelegter Pfad (unter $ HOME / .pyenv) → Abnormal

Wahrscheinlich ruft der Pfad, den Sie von Homebrew aus festgelegt haben, Site-Pakete in 2.x auf. Der Pfad, den Sie in diesem homebrew sehen, befindet sich in der Datei homebrew.pth in $ HOME / .local / lib / python3.5 / site-packages. (Und site.py lädt dieses homebrew.pth. Vielleicht.)

Wenn ich das Innere öffne ...

homebrew.pth


import site; site.addsitedir("/usr/local/lib/python2.7/site-packages")

Bingo! !! !! Immerhin war es das! !! !! !! Wenn Sie diesen Inhalt auskommentieren oder löschen ...

Python ist zurück! !! !! !! PyCharm erkennt und startet auch normal! !! !! !!

Wie oben erwähnt, lesen Sie bitte, wenn Sie Probleme mit einem ähnlichen Fehler haben.

Recommended Posts

Ist pyenv kaputt? Python 3.x verweist beim Start aufgrund eines PYTHONPATH-Fehlers auf das 2.x-Modul
Über den Punkt, an dem Python 3.x aufgrund eines Fehlers aufgrund von caching_sha2_password hängen blieb
ModuleNotFoundError: Kein Modul mit dem Namen'_bz2 'in Python in pyenv
Fehler aufgrund eines Konflikts zwischen Pythons bei der Verwendung von Gurobi