Kann vorhandene virtuelle Umgebung ordnungsgemäß aktualisiert werden?

93

Ich habe eine virtuelle Umgebung für Python 2.5 erstellt und möchte sie auf Python 2.6 "aktualisieren".

So wurde es ursprünglich eingerichtet:

virtualenv --no-site-packages -p python2.5 myenv

Ich führe jetzt virtualenv im selben Verzeichnis aus, um ein Upgrade durchzuführen:

virtualenv --no-site-packages -p python2.6 myenv
...
Not overwriting existing python script myenv/bin/python (you must use myenv/bin/python2.6)
...
Overwriting myenv/bin/activate with new content

Die Standardpython ist immer noch 2.5, obwohl ich auch 2.6 angeben kann. Gibt es eine Möglichkeit , 2.5 vollständig zu entfernen und stattdessen 'bin / python' auf 2.6 zu verweisen?

Matt Norris
quelle

Antworten:

61

Sie können die virtuelle Python 2.6-Version verwenden, um das vorhandene Verzeichnis zu "revirtualisieren". Sie müssen jedoch alle von Ihnen installierten Module neu installieren. Ich habe oft ein virtuelles Verzeichnis für die Entwicklung eines Moduls und virtualenv das gleiche Verzeichnis mit vielen Versionen von Python, und es funktioniert einwandfrei. :) :)

Lennart Regebro
quelle
1
Vielen Dank! Ich habe Ihre Methode ausprobiert und festgestellt, dass das 'Aktivierungs'-Skript aktualisiert wurde, aber die alte Version bleibt erhalten (siehe die überarbeitete Frage). Können Sie ein Beispiel geben?
Matt Norris
13
Sie können einfach die ausführbare Datei bin / python in der virtuellen Umgebung entfernen, bevor Sie die virtuelle Umgebung mit Python 2.6 erneut ausführen.
Carl Meyer
9
Nun, Sie können es zum Laufen bringen - aber warum? Die große Attraktion von virtualenvist, dass es einfach und billig reproduzierbare Python-Umgebungen macht. Warum mit einem Mist spielen und nicht sicher sein, ob Sie alles repariert haben oder ob Sie es wieder reproduzieren können oder ob Sie Ihre Produktionsumgebung stören, wenn Sie nur ein neues sauberes erstellen können?
Ned Deily
9
@Ned: Virtualenv erstellt keine reproduzierbaren Umgebungen, sondern isolierte Umgebungen. Um sie zu reproduzieren, müssen Sie auch alles auf die gleiche Weise installieren. Virtualenv reicht dafür nicht aus. zc.buildout ist dort besser.
Lennart Regebro
1
@Ned: Punkt genommen; Dies ist eine Entwicklungsumgebung, in der ich gearbeitet habe. Ich wollte sie in 2.5 behalten, es sei denn, ich musste unbedingt 2.6 ausführen. Da dies erforderlich war, war ich gespannt, ob Sie eine isolierte Umgebung aktualisieren können, um die Auswirkungen auf Ihren Code zu sehen, ohne Verzeichnisse neu erstellen und in die neue Umgebung kopieren / einfügen zu müssen.
Matt Norris
18

In Python 3.3+ unterstützt venv das Flag --upgrade

  --upgrade             Upgrade the environment directory to use this version
                        of Python, assuming Python has been upgraded in-place.

Verwendung:

python -m venv --upgrade YOUR_VENV_DIRECTORY

Ich habe gerade mein venv bei mehreren Projekten ohne Probleme von Python 3.7.x auf 3.8 aktualisiert.

Vlad Bezden
quelle
1
"vorausgesetzt, Python wurde direkt aktualisiert" ... dies scheint leider zu bedeuten, dass ich, wenn mein System python3auf 3.6 zeigt, python3in meinem venv
joel
4

Sie sollten eine neue virtualenvVerwendung erstellen python2.6und dann nach Aktivierung der neuen Umgebung ihre python2.6und ihre verwenden easy_install, um neue Versionen aller benötigten Site-Pakete zu installieren. Beachten Sie, dass der Pfadname zu dem virtualenvin verschiedenen Dateien in der Umgebung fest verdrahtet ist. Wenn Sie also bereit sind, auf ihn umzuschalten, ändern Sie entweder Ihre Startskripte usw., um auf den neuen virualenvPfad zu verweisen, oder seien Sie beim Kopieren sehr vorsichtig das alte Verzeichnis und das Ändern der Pfadnamen darin.

Ned Deily
quelle
3

Installieren Sie einen zweiten Python unter CentOS

  1. Python herunterladen
  2. auf diff local installieren

    configure --prefix=/opt/virtualenv/python 
    make && make install
    
  3. Erstellen Sie eine virtuelle Umgebung mit neuem Python

    virtualenv /opt/virtualenv --python=/opt/python276/bin/python

    Hinweis: Bei Bedarf kann dies mit einem anderen Benutzer durchgeführt werden

    chown pyuser -R /opt/virtualenv
    su - pyuser
    source /opt/virtualenv/bin/activate
    python -v
    
  4. Erstellen Sie eine virtuelle Umgebung:

    virtualenv /opt/virtualenv
    su - infograficos
    source bin/activate
    
  5. Installiere pip mit Python 2.7 (in virtualenv)

    easy_install pip 
Xoroz
quelle
0

Wenn Sie OS X verwenden, versuchen Sie dies, wenn Sie Python auf eine geringfügig erhöhte Version (z. B. 2.7.6 bis 2.7.8) aktualisieren möchten, während die Bibliotheken von Drittanbietern weiterhin funktionieren.

Es funktioniert für mich in 5 verschiedenen virtuellen Umgebungen mit installiertem Django.

Rockallite
quelle