Zu viele verschiedene Python-Versionen auf meinem System und Probleme verursachen
Lesezeit: 8 Minuten
Skyler
In den letzten Jahren habe ich viele Python-Bibliotheken mit verschiedenen Python-Versionen installiert. Um sie sofort einsatzbereit zu machen, habe ich sie ohne Kontrolle blind eingebaut. Derzeit verursachen sie Probleme, wenn ich versuche zu installieren pynest die numpy, scipy und matplotlib aufruft. Nach dem Kampf werde ich Python und die Bibliotheken bereinigen und neu installieren.
Nach Recherchen habe ich Python 2.5/2.6/2.7/3.2 auf meinem System gefunden, und jeder von ihnen hat einige Kopien oder andere Dinge unter: (my OS == Mac OS X 10.7.5 Löwe)
/Library/Frameworks/
/opt/local/Library/Frameworks/
/opt/local/bin/
/Applications/
/usr/local/bin/
/usr/bin/
/System/Library/Frameworks/
Ich weiß, ich bin verrückt, diese zu haben. Jetzt habe ich alle diese entfernt, außer den Dingen darin /System/Libarary/Frameworks (Ich entferne nie etwas aus /System/Library/). Nach der sauberen Arbeit which python gibt jetzt /usr/bin/python auf die verlinkt wird /System/Library/Frameworks.
Ist es nun eine klare Umgebung für mich, Python neu zu installieren? Wie kann ich überprüfen, ob keine anderen Versionen vorhanden sind? Wie soll ich sie neu installieren, um sicherzustellen, dass sie und ihre Bibliotheken nicht überall sind und wieder viele Kopien haben?
Ich möchte ein sauberes Python 2.7 an einem geeigneten Ort installieren und meinem System genau mitteilen, wo es sich befindet, und niemals irgendwo anders Bibliotheken installieren. Bitte geben Sie mir einen Rat, wie man damit professionell umgeht.
Zu Ihrer Information hier mein aktueller $PATH, ich denke, es sollte geändert werden:
und sie haben Dinge an verschiedenen Orten gemacht. Ich frage mich, was der Mechanismus hinter diesen Wegen ist? Wie wählen sie den Zielort aus? Wie kann man verhindern, dass sie Dinge vermasseln?
Ich nehme an, eine vollständige Neuinstallation des Betriebssystems kommt nicht in Frage? Es hört sich so an, als müssten Sie nachsehen virtuelle Umgebung.
– Nick
2. Januar 13 um 6:51 Uhr
Ich weiß nichts über Macs, aber gibt es nicht eine Art Paketmanager, um es so zu deinstallieren, wie Sie es installiert haben? Oder hast du es einfach entpackt und den PATH bearbeitet und das war’s?
– jadkik94
2. Januar 13 um 8:08 Uhr
@jadkik94 ja gibt es. Manchmal benutze ich easy_install/macport/homebrew/fink/pip, manchmal benutze ich .dmg, manchmal benutze ich .pkg und manchmal kompiliere ich Quellcode, um verschiedene Dinge zu installieren. Deshalb wird es so verrückt.
– Skyler
2. Januar 13 um 08:22 Uhr
Skyler
Warum ist es durcheinander gekommen?
Es gibt ein paar verschiedene Möglichkeiten, Python zu installieren, wie das Update von OP sagt, und sie lokalisieren Dateien an verschiedenen Orten. Beispielsweise, macports legt Dinge hinein /opt/local/, während homebrew legt Dinge hinein /usr/local/. Auch Mac OS X bringt ein paar Python-Versionen mit sich. Wenn Sie also Python viele Male auf verschiedene Weise installieren, werden Sie es tun Holen Sie sich viele Python-Versionen, die unabhängig voneinander existieren auf Ihrem System.
Welches Problem verursacht es?
Ich weiß es nicht genau. Ich denke, das Problem ist, dass, wenn Sie viele Versionen von Python haben, welche Sie verwenden und wo Sie Pakete finden, durch die Pfadreihenfolge in Ihrem System bestimmt wird PATH und das PYTHONPATH bzw. Sie können also die Kontrolle darüber verlieren, wo Python-Module installiert werden sollen. Bedenke das, wenn du rennst sudo python setup.py install um ein Modul zu installieren (es findet python durch die root’s PATH) und versuchen Sie es dann import das Modul durch python -c "import it" (dieses Mal findet es python von your PATH), vielleicht geht etwas schief. Das ist meine Vermutung, ich habe sie nicht validiert. Aber in meinem eigenen Fall ist etwas schief gelaufen.
Wie kann man dies vermeiden?
Ich denke, das Prinzip wäre das Seien Sie sich bewusst, dass verschiedene Methoden und Tools Dinge unabhängig voneinander an verschiedenen Orten installieren, also verwenden Sie sie mit Bedacht.
Wenn Sie dies nicht beabsichtigen, installieren Sie dasselbe nicht zweimal auf unterschiedliche Weise. (Wenn Sie beabsichtigen, dies für Python zu tun, sollten Sie es vielleicht ausprobieren virtualenv)
Behalten Sie die Pfadreihenfolge in Ihrer im Auge PATH und überlege, ob es richtig ist.
Achten Sie beim Installieren von Modulen darauf, welcher Python (oder Pip) ausgeführt wird und wo das Modul installiert ist.
Also, wie habe ich meinen eigenen Fall gelöst?
Da es bereits vermasselt war und sehr schwer zu heilen schien, löste ich diese Frage schließlich durch eine vollständige Neuinstallation des Betriebssystems, und fing an, dem zu folgen Verhaltensregeln Oben. Für die Installation der wissenschaftlichen Umgebung mit Python (numpy/scipy/matplotlib, die Probleme gezeigt hatte, mich diese Frage zu stellen), fand ich dieses Tutorial war extrem hilfreich. Also Problem endlich gelöst.
danke für die einblicke und empfehlungen. Ich scheine in einer ähnlichen Situation gefangen zu sein, aber es wird nicht unkontrollierbar … noch nicht. Ich habe einen nützlichen Beitrag gefunden: leemendelowitz.github.io/blog/… Das hilft herauszufinden, wo eine bestimmte Version von Python nach Importen sucht, und lässt sie im Grunde manuell über symbolische Links an der richtigen Stelle nach dem Richtigen suchen.
– Alisa
7. November 16 um 22:04 Uhr
Folgen Sie auch nicht blind den Anleitungen im Internet, um etwas zum Laufen zu bringen. Bleiben Sie also bei Homebrew oder Macports, je nach Ihren Vorlieben. Verwenden Sie nicht beide. Verwenden Sie nicht dmg oder pkg, um bestimmte Pakete zu installieren, wenn Sie Homebrew FX haben. Bleiben Sie bei Homebrew, egal was passiert. Wenn Sie im Moment mehrere Dinge haben, versuchen Sie, sie einfach zu deinstallieren.
– Alex R
9. August 17 um 9:07 Uhr
Jersey-Bohne
Hier ist, was mich verwirrt hat und wie ich es gelöst habe.
$ which python
/usr/bin/python
$ which python3
/usr/local/bin/python3
$ ls /usr/local/bin/python
ls: /usr/local/bin/python: No such file or directory
Beachten Sie also, dass ich keine HomeBrew-Installation von python2.7 hatte, aber die python3-Installation hatte. Die Version unter /usr/bin/python verwendet den Systemstandard. Sie können anhand des Modulsuchpfads erkennen:
$ /usr/bin/python Python 2.7.10 (Standard, 7. Februar 2017, 00:08:15)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin `Code hier eingeben`Geben Sie "help", "copyright", "credits" oder "license" ein, um weitere Informationen zu erhalten. >>> sys importieren >>> sys.path
['', '/Library/Python/2.7/...
Notice the ‘/Library/Python’… that’s Mac OS’s version of python. But I want to stay strictly on a user installed version (i.e. HomeBrew).
So here’s what I did to fix this:
$ brew install python
...
Warning: python 2.7.13 is already installed, it's just not linked.
You can use `brew link python` to link this version.
$ brew link --overwrite python
$ which python
/usr/local/bin/python
$ python
Python 2.7.10 (default, Feb 7 2017, 00:08:15)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin Geben Sie "help", "copyright", "credits" oder "license" ein, um weitere Informationen zu erhalten. >>> sys importieren >>> sys.path
['', '/usr/local/Cellar/python/2.7.13...
Its no longer /Library/.. but /usr/local.
Now its finding all of my pip installed modules! Problem solved!
UPDATE:
After updating brew to version 1.5.4, it seems the symbolic links were removed. And now you have to add this to your path:
==> Caveats
This formula installs a python2 executable to /usr/local/bin.
If you wish to have this formula's python executable in your PATH then add
the following to ~/.bash_profile:
export PATH="/usr/local/opt/python/libexec/bin:$PATH"
Pip and setuptools have been installed. To update them
pip2 install --upgrade pip setuptools
You can install Python packages with
pip2 install <package>
They will install into the site-package directory
/usr/local/lib/python2.7/site-packages
See: https://docs.brew.sh/Homebrew-and-Python.html
In order to install a python distributions into specific folder, you can use the --prefix scheme during python installation. Using the prefix scheme, you can for example install Python 2.7 into the folder /opt/py27. Now, in order to use the new installed Python distribution you have to: cleanup you PATH and LD_LIBRARY_PATH:
Remove all ‘old’ Python paths and
configure (according to my example) the environment variables like this:
PATH: Add /opt/py27/bin
LD_LIBRARY_PATH: Add /opt/py27/lib
That’s it.
(In case you need multiple environments of Python installed at the same time, I’d suggest to have a look at virtualenv)
I did what you said but the problem remains. It throws errors when I import nest and I believe it’s caused by the multiples copies of libraries. How could I completely remove all the libraries(and also easy_install etc.) and reinstall?
– Skyler
Jan 2 ’13 at 9:14
This sounds promising, but the page to which you link only discusses installing Python modules rather than the base system. How would you install the whole of Python2.7 into /opt/py27 as you mention? It seems to me that the confusion comes principally because each and every Python version/flavour wants to install its own binaries (python, pip, easy_install) with the same names and in the same places as other versions/flavours.
– jez
Dec 17 ’15 at 18:49
tl;dr brew install python
Symptoms
I had similar issues with python programs not finding dependencies.
My python3 version was a broken symlink.
My pip was pointing to a python 3.8
And my pip3 was pointing to 3.9
python -V was outputting some python 2.7 version
python3 -V was outputting some python3.8 version
Solution
I ran brew install python and it fixed all my problems.
.
6194100cookie-checkZu viele verschiedene Python-Versionen auf meinem System und Probleme verursachenyes
Ich nehme an, eine vollständige Neuinstallation des Betriebssystems kommt nicht in Frage? Es hört sich so an, als müssten Sie nachsehen virtuelle Umgebung.
– Nick
2. Januar 13 um 6:51 Uhr
Ich weiß nichts über Macs, aber gibt es nicht eine Art Paketmanager, um es so zu deinstallieren, wie Sie es installiert haben? Oder hast du es einfach entpackt und den PATH bearbeitet und das war’s?
– jadkik94
2. Januar 13 um 8:08 Uhr
@jadkik94 ja gibt es. Manchmal benutze ich
easy_install
/macport
/homebrew
/fink
/pip
, manchmal benutze ich.dmg
, manchmal benutze ich.pkg
und manchmal kompiliere ich Quellcode, um verschiedene Dinge zu installieren. Deshalb wird es so verrückt.– Skyler
2. Januar 13 um 08:22 Uhr