Was ist der richtige Weg, um mehrere Python-Versionen zu verwalten?
21
Ich habe einen Computer mit Python 2.6 als Standard-Python installiert. Dann habe ich Python 2.7 installiert und / usr / bin / python manuell als Symlink zur neuen Installation erstellt.
Das Ändern des Standard-Pythons (oder von Perl usw.) unter einem Betriebssystem ist wirklich eine schlechte Idee. Dieser Interpreter ist tatsächlich Teil des Betriebssystems, und es kann durchaus andere Betriebssystemkomponenten geben, die speziell für diese Version des Interpreters geschrieben wurden.
Bei Redhat ist das yum-Tool, das Systemsoftware-Updates ausführt, beispielsweise eine Python-Anwendung. Du willst das wirklich nicht brechen. Solche Anwendungen können von bestimmten, möglicherweise nicht standardmäßigen Python-Modulen abhängen, die in der von Ihnen installierten Version möglicherweise nicht installiert sind. Ich glaube zum Beispiel, dass einige der in Python integrierten OS-Tools ein ORM namens Storm verwenden, das nicht Teil der Python-Standardbibliothek ist. Hat Ihre saubere Python 2.7-Installation die spezifische erwartete Version des Storm-Moduls installiert? Hat es eine Version von Storm? Nein? Dann haben Sie gerade einen Teil Ihres Betriebssystems zerstört.
Der richtige Weg, dies zu tun, ist, Ihre bevorzugte Version von Python zu installieren und Ihr Benutzerkonto einzurichten, um es zu verwenden, indem Sie Ihr .bash_profile, Ihren Pfad und dergleichen einrichten. Vielleicht möchten Sie auch das virtualenv-Modul für Python untersuchen.
Ich habe hier gegoogelt. Wäre -1, wenn ich den Repräsentanten auf diesem Stapel hätte. Warum? Denn der vorgeschlagene Ansatz besagt nur "Installiere deine bevorzugte Version von Python". Wie geht das, ohne das System Python zu verschließen?
jez
@jez Benutzer sollten die Installationsanweisungen für die von ihnen gewählte Kombination aus Anwendung und Betriebssystem beachten. Im Allgemeinen werden Sprachinstallationspakete an einem sicheren Ort installiert, wobei die Kernbetriebssystemkomponenten nicht überschrieben werden. Daher ist das Überschreiben der Betriebssystemversion der Sonderfall.
Simon Hibbs
8
Wie behebe ich dieses Durcheinander?
Nichts weiter als eine Neuinstallation python. Dadurch wird Ihre Änderung rückgängig gemacht (der Symlink).
Warum möchten Sie es als Standard? Jedes Mal, wenn Sie es benötigen, verwenden Sie einfach (den shebang) am Anfang Ihrer (ausführbaren) Skripte python2.7oder #!/usr/bin/python2.7fügen Sie ihn ein .
Wenn Sie darauf bestehen, python2.7systemweite Standardeinstellungen zu verwenden, verwenden Sie eine spätere Version von Ubuntu (derzeit Ubuntu 11.04 mit dem Codenamen Natty). Diese Version wird standardmäßig verwendet.
Vermeiden Sie in Zukunft manuelle Eingriffe wie das, was Sie mit der Symlink-Sache gemacht haben. Dies gilt insbesondere für Dateien mit Distributionsverwaltung und insbesondere für komplexe Objekte wie Python-Installationen.
Ich dachte, dass es nur sinnvoll ist, die Standard-Python-Installation nach dem Upgrade zu ändern. Ich möchte es als Standard, weil ich mit dem neueren Python arbeiten möchte ... als Standard. Wenn ich pythonvon Bash schreibe, möchte ich die neue Python bekommen. Gibt es einen besseren Weg, dies zu tun als das, was ich getan habe?
Ripper234
Nur zur Erinnerung - ich glaube nicht, dass irgendetwas an der Art und Weise, wie ich Python 2.7 installiert habe, falsch war. Der einzige "unorthodoxe" Schritt war, den Symlink zu ändern, was meiner Meinung nach der richtige Weg war , ihn als Standard festzulegen. Gibt es einen besseren Weg?
Ripper234
2
@ripper: Ich schätze, ich komme etwas spät zu diesem Thread. Wie Tshepang sagt, bestimmt das pythonPaket auf Ubuntu die Systemversion. Sie können Ihre Installation jetzt so anpassen, dass Python 2.7 standardmäßig verwendet wird, indem Sie ein eigenes Python-Paket usw. erstellen. In diesem Fall behalten Sie jedoch Ihre Python-Installation anstelle von Ubuntu bei und müssen erst lernen, wie Python funktioniert wird unter Debian / Ubuntu verwaltet. Bedenken Sie, dass die anderen Python-Pakete im System so konfiguriert sind, dass sie standardmäßig mit 2.6 funktionieren.
Faheem Mitha
1
@ Tshepang: Gute Zusammenfassung!
Faheem Mitha
12
@ ripper234: Ändere nichts in /usr/bin, das ist für deine Distribution reserviert. Stellen Sie stattdessen /usr/local/bin/pythoneinen symbolischen Link zu her python2.7. Dann führen Skripte mit #!/usr/bin/env python(der empfohlenen Sprache) sowie die Eingabe pythonin der Befehlszeile Python 2.7 aus. Skripte aus der Distribution, die Python aus der Distribution erhalten möchten, können weiterhin Anrufe tätigen #!/usr/bin/python.
Gilles 'SO - hör auf böse zu sein'
2
Haftungsausschluss: Ich habe gerade die gleiche Antwort für den Stapelüberlauf gepostet:
Hier ist meine Sicht auf das Problem. Funktioniert für Python3. Die Hauptmerkmale sind:
Jede Python-Version wird aus dem Quellcode kompiliert
Alle Versionen werden lokal installiert
Beeinträchtigt in keiner Weise die Standard-Python-Installation Ihres Systems
Jede Python-Version ist mit virtualenv isoliert
Die Schritte sind wie folgt:
Wenn Sie mehrere zusätzliche Python-Versionen auf andere Weise installiert haben, entfernen Sie diese, z. B. $ HOME / .local / lib / python3.x usw. (auch die global installierten). Berühren Sie jedoch nicht die Standard-Python3-Version Ihres Systems.
Download-Quelle für verschiedene Python-Versionen unter der folgenden Verzeichnisstruktur:
$HOME/
python_versions/: download Python-*.tgz packages here and"tar xvf" them.You'll get directories like this:
Python-3.4.8/
Python-3.6.5/
Python-3.x.y/
...
Bei jedem „Python-3.xy /“ Verzeichnis, gehen Sie wie folgt (bitte NICHT verwenden „sudo“ in einem der Schritte!):
mkdir root
./configure --prefix=$PWD/root
make -j 2
make install
virtualenv --no-site-packages -p root/bin/python3.x env
Erstellen Sie unter "python_versions /" folgende Dateien:
env_python3x.bash:#!/bin/bash
echo "type deactivate to exit"
source $HOME/python_versions/Python-3.x.y/env/bin/activate
Nun, wann immer Sie sich für python3.x entscheiden möchten, tun Sie dies
source $HOME/python_versions/env_python3x.bash
um die virtuelle Umgebung aufzurufen
Installieren Sie in der virtuellen Umgebung Ihre bevorzugten Python-Pakete mit
pip install --upgrade package_name
Um die Virtualenv- und Python-Version zu beenden, geben Sie einfach "disable" ein.
Wir haben viele Python-Distributionen auf Mac und Ubuntu installiert und hier meine Empfehlung.
Lassen Sie das System Python unbeschadet: Verwenden Sie es nie.
Wenn Sie nur eine primäre Python-Distribution benötigen, laden Sie Canopy von enthought herunter und installieren Sie es. Wenn es installiert wird, wählen Sie "Als mein System-Python festlegen" und dann können Sie Pakete von Canopys GUI-Paket-Manager installieren.
Canopy ist auch sofort einsatzbereit mit pipdem PyPi-Paketmanager-Befehl, mit dem Sie Pakete installieren können (z. B. pip install python-twitter).
Wenn Sie vorhaben, virtuelle Umgebungen zu verwenden (dh Sie entwickeln Python-Programme und möchten für jede eine eigene, saubere Python-Umgebung, zwischen denen Sie auf einfache Weise wechseln können), empfehle ich Anaconda anstelle von Canopy, da es sich um ein Virtual Environment Manager-Tool handelt . Das wirst du lassen
# Increase the chances that the build will have all dependencies.# https://github.com/pyenv/pyenv/wiki/Common-build-problems
sudo apt build-dep python3
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev python-openssl git
# Build and install a Python version from source.
pyenv install 3.8.0
Liste der verfügbaren Python-Versionen:
pyenv versions
Wir haben nun:
* system (set by /home/cirsan01/.pyenv/version)3.8.0
Nichts weiter als eine Neuinstallation
python
. Dadurch wird Ihre Änderung rückgängig gemacht (der Symlink).Warum möchten Sie es als Standard? Jedes Mal, wenn Sie es benötigen, verwenden Sie einfach (den shebang) am Anfang Ihrer (ausführbaren) Skripte
python2.7
oder#!/usr/bin/python2.7
fügen Sie ihn ein .Wenn Sie darauf bestehen,
python2.7
systemweite Standardeinstellungen zu verwenden, verwenden Sie eine spätere Version von Ubuntu (derzeit Ubuntu 11.04 mit dem Codenamen Natty). Diese Version wird standardmäßig verwendet.Vermeiden Sie in Zukunft manuelle Eingriffe wie das, was Sie mit der Symlink-Sache gemacht haben. Dies gilt insbesondere für Dateien mit Distributionsverwaltung und insbesondere für komplexe Objekte wie Python-Installationen.
quelle
python
von Bash schreibe, möchte ich die neue Python bekommen. Gibt es einen besseren Weg, dies zu tun als das, was ich getan habe?python
Paket auf Ubuntu die Systemversion. Sie können Ihre Installation jetzt so anpassen, dass Python 2.7 standardmäßig verwendet wird, indem Sie ein eigenes Python-Paket usw. erstellen. In diesem Fall behalten Sie jedoch Ihre Python-Installation anstelle von Ubuntu bei und müssen erst lernen, wie Python funktioniert wird unter Debian / Ubuntu verwaltet. Bedenken Sie, dass die anderen Python-Pakete im System so konfiguriert sind, dass sie standardmäßig mit 2.6 funktionieren./usr/bin
, das ist für deine Distribution reserviert. Stellen Sie stattdessen/usr/local/bin/python
einen symbolischen Link zu herpython2.7
. Dann führen Skripte mit#!/usr/bin/env python
(der empfohlenen Sprache) sowie die Eingabepython
in der Befehlszeile Python 2.7 aus. Skripte aus der Distribution, die Python aus der Distribution erhalten möchten, können weiterhin Anrufe tätigen#!/usr/bin/python
.Haftungsausschluss: Ich habe gerade die gleiche Antwort für den Stapelüberlauf gepostet:
/programming/2812520/pip-dealing-with-multiple-python-versions/50319252
Hier ist meine Sicht auf das Problem. Funktioniert für Python3. Die Hauptmerkmale sind:
Die Schritte sind wie folgt:
Wenn Sie mehrere zusätzliche Python-Versionen auf andere Weise installiert haben, entfernen Sie diese, z. B. $ HOME / .local / lib / python3.x usw. (auch die global installierten). Berühren Sie jedoch nicht die Standard-Python3-Version Ihres Systems.
Download-Quelle für verschiedene Python-Versionen unter der folgenden Verzeichnisstruktur:
Bei jedem „Python-3.xy /“ Verzeichnis, gehen Sie wie folgt (bitte NICHT verwenden „sudo“ in einem der Schritte!):
Erstellen Sie unter "python_versions /" folgende Dateien:
Nun, wann immer Sie sich für python3.x entscheiden möchten, tun Sie dies
um die virtuelle Umgebung aufzurufen
Installieren Sie in der virtuellen Umgebung Ihre bevorzugten Python-Pakete mit
Um die Virtualenv- und Python-Version zu beenden, geben Sie einfach "disable" ein.
quelle
Wir haben viele Python-Distributionen auf Mac und Ubuntu installiert und hier meine Empfehlung.
Lassen Sie das System Python unbeschadet: Verwenden Sie es nie.
Wenn Sie nur eine primäre Python-Distribution benötigen, laden Sie Canopy von enthought herunter und installieren Sie es. Wenn es installiert wird, wählen Sie "Als mein System-Python festlegen" und dann können Sie Pakete von Canopys GUI-Paket-Manager installieren.
pip
dem PyPi-Paketmanager-Befehl, mit dem Sie Pakete installieren können (z. B.pip install python-twitter
).quelle
pyenv
https://github.com/pyenv/pyenv
Mit Pyenv können Sie mehrere Python-Versionen ohne sudo für einen einzelnen Benutzer verwalten, ähnlich wie mit Node.js NVM und Ruby RVM .
Installieren Sie Pyenv:
Dann ergänzen Sie Ihre
.bashrc
:Finden Sie die zu installierende Python-Version:
Installieren Sie die gewünschte Python-Version:
Liste der verfügbaren Python-Versionen:
Wir haben nun:
Wählen Sie eine andere Python-Version:
Beide Ausgaben:
Wir können nun fortfahren, Pakete normal zu installieren und zu verwenden:
Wir können bestätigen, dass alles lokal in unserer sauberen Umgebung installiert ist mit:
Pro Projektverwendung
Im vorherigen Abschnitt haben wir gesehen, wie pyenv in einem globalen Setup verwendet wird.
Normalerweise möchten Sie jedoch eine bestimmte Python- und Paketversion pro Projekt festlegen. So geht's.
Installieren Sie zunächst Ihre gewünschte Python-Version wie zuvor.
Stellen Sie dann in Ihrem Projektverzeichnis die gewünschte Python-Version ein mit:
Dadurch wird eine Datei erstellt,
.python-version
die die Versionszeichenfolge enthält.Und nun lassen Sie sich ein Paket lokal nur für unser Projekt zu installieren: TODO: Es gibt keine nette Art , wie es scheint: /programming/30407446/pyenv-choose-virtualenv-directory/59267972#59267972
Wenn jemand Ihr Projekt verwenden möchte, führt er Folgendes aus:
Dadurch wird die Python-Version auf die richtige eingestellt.
Verwandte Themen:
Getestet unter Ubuntu 18.04, pyenv 1.2.15.
quelle