5 Stimmen

OS X - mehrere Python-Versionen, PATH und /usr/local

Wenn Sie mehrere Python-Versionen installieren (ich habe derzeit die Standardversion 2.5, habe 3.0.1 und jetzt 2.6.2 installiert), wird automatisch etwas in /usr/local und passt auch den Pfad an, um die /Library/Frameworks/Python/Versions/theVersion/bin aber was nützt das, wenn /usr/local befindet sich bereits im PATH, und alle installierten Versionen (außer der Standardversion 2.5, die sich in /usr/bin ) sind da drin? Ich habe die Pfade des Python-Frameworks aus meinem PATH in .bash_profile und ich kann immer noch tippen "python -V" => "Python 2.5.1" , "python2.6 -V" => "Python 2.6.2" , "python3 -V" => "Python 3.0.1" . Ich frage mich nur, warum er es in /usr/local und ändert auch den PATH. Und ist das, was ich gemacht habe, in Ordnung? Danke!

Außerdem war die 2.6-Installation die "aktuelle", da sie .../Python.framework/Versions/Current auf 2.6. hinweisen, also einfache 'python'-Dinge in /usr/local/bin auf 2,6 zeigen, aber das spielt keine Rolle, weil usr/bin kommt zuerst und Dinge mit dem gleichen Namen weisen auf 2.5 Sachen hin. Wie auch immer, 2.5 kommt mit Leopard, ich installierte 3.0.1 nur um die neueste Version zu haben (die eine dmg-Datei hat), und jetzt habe ich 2.6.2 für die Verwendung mit pygame installiert.

EDIT: OK, so habe ich es verstanden. Wenn Sie, sagen wir, Python 2.6.2 installieren: Eine Reihe von Symlinks werden hinzugefügt zu /usr/local/bin Wenn es also eine #! /usr/local/bin/python shebang in einem Python-Skript, wird es ausgeführt, und in /Applications/Python 2.6 wird der Python Launcher zur Standardanwendung für die Ausführung von .py-Dateien gemacht, die die /usr/local/bin/pythonw und /Library/Frameworks/Python.framework/Versions/2.6/bin wird erstellt und dem Pfad vorangestellt, so dass which python wird den Python dort hineinbringen, und auch #! /usr/bin/env python korrekt ausgeführt wird.

5voto

Alex Martelli Punkte 805329

Es gibt keine a priori Garantie, dass /usr/local/bin im PATH verbleibt (insbesondere wird es nicht notwendigerweise "vor" /usr/bin verbleiben!-), daher ist es für einen Installer absolut vernünftig, sicherzustellen, dass das speziell benötigte /Library/.../bin-Verzeichnis in den PATH gelangt. Außerdem kann es sein, dass /Library/.../bin zusätzliches Material enthält, das nicht nach /usr/local/bin symverlinkt wird, obwohl ich glaube, dass das bei neueren Mac-Standarddistributionen von Python derzeit nicht der Fall ist.

Wenn Sie wissen, dass die Art und Weise, wie Sie Ihren Pfad einrichten werden, und die genaue Menge der ausführbaren Dateien, die Sie verwenden werden, vollständig von /usr/local/bin erfüllt werden, dann ist es natürlich völlig in Ordnung, wenn Sie die Verzeichnisse /Library/etc aus Ihrem eigenen Pfad entfernen.

0voto

snarkyname77 Punkte 1114

Ich habe dieses Problem gerade auf meinem Mac bemerkt/erlebt. Ich habe Python 2.5.4, 2.6.2 und 3.1.1 auf meinem Rechner und war auf der Suche nach einer Möglichkeit, einfach zwischen ihnen zu wechseln. Dabei fielen mir die vielen Symlinks für die ausführbaren Dateien auf, die ich sowohl in '/usr/bin' als auch in '/usr/local/bin' fand. Ich entfernte alle nicht versionsspezifischen Symlinks, so dass python2.5, python2.6 usw. übrig blieben, und schrieb ein Bash-Shell-Skript, das ich als Root ausführen kann, um einen Symlink zu ändern, den ich verwende, um den Pfad zur Version meiner Wahl zu leiten

/Library/Frameworks/Python.framework/Versions/Current'.

Der einzige Nachteil beim Herausreißen der Symlinks wäre, wenn eine andere Anwendung sie aus irgendeinem Grund benötigt. Meine Meinung dazu, warum diese Symlinks erstellt werden, ist ähnlich wie die Einschätzung von Alex: Das Installationsprogramm versucht, alle Grundlagen abzudecken. Alle meine Versionen wurden von einem Installationsprogramm installiert, obwohl ich versucht habe, meine eigenen zu kompilieren, um die volle 64-Bit-Unterstützung zu aktivieren, und wenn Sie Ihre eigenen kompilieren und installieren, können Sie wählen, dass die Symlinks nicht erstellt oder der PATH während der Installation geändert werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X