Virtualenv existant peut-il être mis à niveau gracieusement?

93

J'ai un virtualenv créé pour Python 2.5 et je souhaite le "mettre à niveau" vers Python 2.6.

Voici comment il a été configuré à l'origine:

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

Je lance maintenant virtualenv dans le même répertoire pour mettre à niveau:

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

Le python par défaut est toujours 2.5, même si je peux également spécifier 2.6. Existe-t-il un moyen de supprimer complètement 2.5 et de faire pointer 'bin / python' vers 2.6 à la place?

Matt Norris
la source

Réponses:

62

Vous pouvez utiliser virtualenv Python 2.6 pour "revirtualiser" le répertoire existant. Vous devrez cependant réinstaller tous les modules que vous avez installés. J'ai souvent un répertoire virtuel pour développer un module, et virtualenv le même répertoire avec de nombreuses versions de Python, et cela fonctionne très bien. :)

Lennart Regebro
la source
1
Merci! J'ai essayé votre méthode et j'ai vu que le script 'activate' est mis à jour, mais l'ancienne version reste (voir la question révisée). Êtes-vous en mesure de donner un exemple?
Matt Norris
13
vous pouvez simplement supprimer l'exécutable bin / python dans virtualenv avant de réexécuter virtualenv avec python 2.6.
Carl Meyer
9
Eh bien, vous pouvez le faire fonctionner - mais pourquoi? Le grand attrait de virtualenvest qu'il rend facilement et à peu de frais des environnements python reproductibles. Pourquoi s'en prendre à un et ne pas être certain que vous avez tout réparé ou que vous pouvez le reproduire à nouveau ou que vous dérangez votre environnement de production alors que vous pouvez simplement en créer un nouveau propre?
Ned Deily
9
@Ned: Virtualenv ne crée pas d'environnements reproductibles, il crée des environnements isolés. Pour les reproduire, vous devez également tout installer de la même manière, virtualenv ne suffit pas pour cela. zc.buildout est meilleur là-bas.
Lennart Regebro
1
@Ned: Point pris; c'est un environnement de développement dans lequel je travaillais. Je voulais le garder en 2.5 sauf si j'avais absolument besoin de faire 2.6. Ce besoin s'est fait sentir, j'étais donc curieux de savoir si vous pouviez mettre à niveau un environnement isolé pour voir les effets sur votre code, sans avoir à reconstruire et copier / coller des répertoires dans le nouvel env.
Matt Norris
19

Dans Python 3.3+, venv prend en charge --upgrade flag

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

Usage:

python -m venv --upgrade YOUR_VENV_DIRECTORY

Je viens de mettre à niveau mon venv de Python 3.7.x à 3.8 sur plusieurs projets sans aucun problème.

Vlad Bezden
la source
1
"en supposant que Python a été mis à jour sur place" ... cela semble malheureusement signifier que si mon système python3pointe vers 3.6, je ne peux pas créer arriver python3au point vers 3.7 dans mon venv
joel
4

Vous devez créer un nouvel virtualenvenvironnement python2.6, puis, après avoir activé le nouvel env, utiliser son python2.6et ses easy_installpour installer de nouvelles versions de tout package de site dont vous avez besoin. Sachez que le nom du chemin vers le virtualenvest câblé dans divers fichiers de l'environnement, donc, lorsque vous êtes prêt à y basculer, modifiez vos scripts de démarrage et autres pour faire référence au nouveau virualenvchemin ou soyez très prudent en le copiant vers l'ancien répertoire et en modifiant les noms de chemin à l'intérieur.

Ned Deily
la source
3

Installer un deuxième Python sur CentOS

  1. télécharger python
  2. installer pour diff local

    configure --prefix=/opt/virtualenv/python 
    make && make install
  3. créer un environnement virtuel en utilisant le nouveau python

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

    remarque: si nécessaire, cela peut être fait avec un autre utilisateur

    chown pyuser -R /opt/virtualenv
    su - pyuser
    source /opt/virtualenv/bin/activate
    python -v
  4. Créez un environnement virtuel:

    virtualenv /opt/virtualenv
    su - infograficos
    source bin/activate
  5. Installez pip avec python 2.7 (dans virtualenv)

    easy_install pip 
Xoroz
la source
0

Si vous utilisez OS X, essayez ceci si vous voulez mettre à niveau Python vers une version légèrement augmentée (par exemple 2.7.6 à 2.7.8) tout en maintenant le fonctionnement des bibliothèques tierces.

Cela fonctionne pour moi sur 5 environnements virtuels différents avec Django installé.

Rockallite
la source