2009-09-05 3 views
5

Wenn Sie mehrere Versionen von Python installieren (ich habe derzeit die Standard 2.5, installierte 3.0.1 und jetzt 2.6.2 installiert), setzt es automatisch Zeug in /usr/local, und es passt auch den Pfad an, um die /Library/Frameworks/Python/Versions/theVersion/bin einzuschließen, aber was ist der Punkt davon, wenn /usr/local bereits auf dem PATH ist, und alle installierten Versionen (außer dem Standard 2.5, der in /usr/bin ist) sind dort? Ich entfernte die Python-Framework-Pfade von meinem Pfad in .bash_profile, und ich kann immer noch "python -V" => "Python 2.5.1", "python2.6 -V" => "Python 2.6.2", "python3 -V" => "Python 3.0.1" eingeben. Ich frage mich nur, warum es in /usr/local steckt, und ändert auch den PATH. Und ist das, was ich gut gemacht habe? Vielen Dank.OS X - mehrere Python-Versionen, PATH und/usr/local

Auch die 2.6 Installation machte es die ‚aktuellen‘ ein, .../Python.framework/Versions/Current Punkt bis 2,6., Also schlicht ‚Python‘ Dinge in /usr/local/bin Punkt 2.6, aber es spielt keine Rolle, weil usr/bin erste und die Dinge mit dem kommt Der gleiche Name in dort Punkt auf 2.5 Zeug .. Wie auch immer, 2,5 kommt mit Leopard, ich 3.0.1 installiert, nur um die neueste Version (die eine dmg-Datei hat), und jetzt habe ich 2.6.2 für die Verwendung mit Pygame installiert.

EDIT: OK, hier ist, wie ich es verstehe. Bei der Installation, sagen wir, Python 2.6.2: Eine Reihe von symbolischen Links zu /usr/local/bin hinzugefügt, so wenn es eine #! /usr/local/bin/python Shebang in einem Python-Skript, wird es ausgeführt, und in /Applications/Python 2.6, wird der Python Launcher Standardanwendung ausgeführt werden. py-Dateien, die /usr/local/bin/pythonw und /Library/Frameworks/Python.framework/Versions/2.6/bin verwendet wird erstellt und an der Vorderseite des Pfades hinzugefügt, so which python wird das Python dort, und auch #! /usr/bin/env python shebang wird ordnungsgemäß ausgeführt werden.

+0

Was ist mit Pythons virtualenv Paket? Das scheint eine ziemlich populäre Möglichkeit zu sein, mehrere Python-Installationen auf einem Rechner zu haben. haben andere Benutzer dies auf ihren OS x Maschinen getan? – Foofy

Antwort

5

Es gibt keine a priori-Garantie, dass/usr/local/bin auf dem PATH bleibt (besonders wird es nicht unbedingt "vor"/usr/bin! -) bleiben, so dass es für einen Installierer völlig in Ordnung ist Das speziell benötigte Verzeichnis /Library/.../bin wird auf den PATH gesetzt. Außerdem kann es sein, dass die /Library/.../bin zusätzliche Dateien enthält, die nicht in/usr/local/bin verlinkt werden, obwohl ich glaube, dass dies bei den aktuellen Mac-Standard-Distributionen von Python nicht der Fall ist.

Wenn Sie wissen, dass die Art und Weise, wie Sie Ihren Pfad und die genaue Menge ausführbarer Dateien einrichten werden, vollständig aus/usr/local/bin erfüllt sind, dann ist es ganz in Ordnung, das/Bibliothek/etc Verzeichnisse natürlich von Ihrem eigenen Pfad.

+0

Was passiert, wenn ich Python 2.6 entferne?Ich könnte es aus/Applications und /Library/..../Versions/2.6.2 entfernen, aber was ist mit/usr/local /? Würde nicht ein Haufen gebrochener symbolischer Links zurückbleiben? Und ich würde nicht da drinnen versuchen wollen, die 2.6.2 zu finden .. Ich weiß nicht .. – mk12

+0

Ja, Sie müssten die (wenigen) 2.6-spezifischen Symlinks entfernen, außer Sie verwende eine Distribution, die mit einer "uninstall" ausgeliefert wird (ich glaube, die Standardversion von python.org nicht) - 'ls -l/usr/local/bin | grep 'Python. * 2.6'' wird sie natürlich leicht identifizieren, also gibt es kein "Durcheinander" oder "versuchen zu picken". –

+0

Konnte ich nicht auch alles in/usr/local/bin loswerden und einfach /Python.framework/Versions/x.x.x/bin auf den Pfad in der von mir gewünschten Reihenfolge setzen? – mk12

0

Ich habe gerade dieses Problem auf meinem Mac bemerkt/festgestellt. Ich habe Python 2.5.4, 2.6.2 und 3.1.1 auf meinem Rechner und war auf der Suche nach einem Weg, um einfach zwischen ihnen zu wechseln. Damals bemerkte ich alle Symlinks für die ausführbaren Dateien, die ich sowohl in/usr/bin als auch in/usr/local/bin fand. Ich habe alle nicht-versionsspezifischen Symlinks herausgerissen, python2.5, python2.6, etc hinterlassen und ein Bash-Shell-Skript geschrieben, das ich als root ausführen kann, um einen Symlink zu ändern, den ich verwende, um den Pfad auf die Version meiner Wahl zu lenken

‚/Library/Frameworks/Python.framework/Versions/Current‘

Die einzige schlechte Sache über die Symlinks aus Rippen, ist, wenn eine andere Anwendung sie aus irgendeinem Grund notwendig. Meine Meinung, warum diese symbolischen Links erstellt wurden, ist ähnlich wie bei Alex, der Installer versucht, alle Grundlagen abzudecken. Alle meine Versionen wurden von einem Installer installiert, obwohl ich versucht habe, eigene zu kompilieren, um volle 64-Bit-Unterstützung zu ermöglichen, und wenn Sie Ihre eigenen kompilieren und installieren, können Sie die Symlinks nicht erstellen lassen oder den PATH ändern Installation.