Existe-t-il un moyen de mettre à niveau la version de python utilisée dans un virtualenv (par exemple, si une version de correction de bug sort)?
Je pourrais pip freeze --local > requirements.txt
, puis supprimer le répertoire et pip install -r requirements.txt
, mais cela nécessite beaucoup de réinstallation de grandes bibliothèques, par exemple,numpy
, que j'utilise beaucoup.
Je peux voir que c'est un avantage lors de la mise à niveau de, par exemple, 2.6 -> 2.7, mais qu'en est-il de 2.7.x -> 2.7.y?
python
version
virtualenv
pip
Simon Walker
la source
la source
Réponses:
Vous avez vu ça ? Si je n'ai pas mal compris cette réponse, vous pouvez essayer de créer un nouveau virtualenv au-dessus de l'ancien. Vous avez juste besoin de savoir quel python va utiliser votre virtualenv (vous aurez besoin de voir votre version de virtualenv).
Si votre virtualenv est installé avec la même version python de l'ancienne et que la mise à niveau de votre package virtualenv n'est pas une option, vous voudrez peut-être lire ceci afin d'installer un virtualenv avec la version python que vous souhaitez.
ÉDITER
J'ai testé cette approche (celle qui crée un nouveau virtualenv au-dessus de l'ancienne) et cela a bien fonctionné pour moi. Je pense que vous pouvez avoir des problèmes si vous passez de python 2.6 à 2.7 ou 2.7 à 3.x mais si vous mettez simplement à niveau à l'intérieur de la même version (en restant à 2,7 comme vous le souhaitez), vous ne devriez pas avoir de problème, car tous les packages sont conservés dans les mêmes dossiers pour les deux versions de python (les packages 2.7.x et 2.7.y se trouvent dans your_env / lib / python2.7 /).
Si vous changez votre version de virtualenv python, vous devrez réinstaller tous vos packages pour cette version (ou simplement lier les packages dont vous avez besoin dans le dossier des nouveaux packages de version, par exemple: your_env / lib / python_newversion / site-packages)
la source
virtualenv
en plus de l'ancien, et cela a fonctionné. Je devais spécifier-p
de le pointer vers la bonne version de python.Si vous utilisez le module venv fourni avec Python 3.3+, il prend en charge une
--upgrade
option. Selon les documents :la source
venv
et refusent de le réparer sur la base que "vous pouvez simplement utiliser virtualenv". EDIT: en fait, ça marche! Il affiche également un message d'erreur sur "Ensurepip".python3.6 -m venv --upgrade <path_of_existing_env>
bin/python
etbin/python3
toujours lié à l'ancienpython3.4
binaire, et j'ai dû définir les liens manuellement. De plus, existe-t-il un moyen de supprimer la version python désormais obsolète?Error: Command '['/Users/me/Sites/site/venv3/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1.
> qu'est-ce que cela signifie? Je ne vois aucun processus Python actif, je ne peux pas mettre à niveau.python3.6 -m venv --upgrade ENV_DIR
pour que cela fonctionne. Je pense que je devrai encore mettre à jour certains liens symboliquesENV_DIR/bin
. Par conséquent, l'astuce consistait à mettre à jour avec la nouvelle version Python alors que l'ancienne version était toujours installée.Mis à jour à nouveau: la méthode suivante peut ne pas fonctionner dans les versions plus récentes de virtualenv. Avant d'essayer d'apporter des modifications à l'ancien virtualenv, vous devez enregistrer les dépendances dans un fichier d'exigences (
pip freeze > requirements.txt
) et en faire une sauvegarde ailleurs. En cas de problème, vous pouvez toujours créer un nouveau virtualenv et y installer les anciennes dépendances (pip install -r requirements.txt
).Mise à jour: j'ai changé la réponse 5 mois après avoir répondu à l'origine. La méthode suivante est plus pratique et robuste.
Effet secondaire: il corrige également l'
Symbol not found: _SSLv2_method
exception lorsque vous le faitesimport ssl
dans un environnement virtuel après la mise à niveau de Python vers la v2.7.8.Avis: À l' heure actuelle, ceci est pour Python 2.7.x seulement .
Si vous utilisez Homebrew Python sur OS X, tout d'
deactivate
abord virtualenv, puis mettez à niveau Python:Exécutez les commandes suivantes (
<EXISTING_ENV_PATH>
est le chemin de votre environnement virtuel):Enfin, recréez votre environnement virtuel:
Ce faisant, les anciens fichiers de base Python et les bibliothèques standard (plus
setuptools
etpip
) sont supprimés, tandis que les bibliothèques personnalisées installées danssite-packages
sont conservées et fonctionnent, dès qu'elles sont en Python pur. Les bibliothèques binaires peuvent ou non avoir besoin d'être réinstallées pour fonctionner correctement.Cela a fonctionné pour moi sur 5 environnements virtuels avec Django installé.
BTW, si cela
./manage.py compilemessages
ne fonctionne pas par la suite, essayez ceci:la source
bin/python
fichier.setuptools
etpip
est nécessaire.<EXISTING_ENV_PATH>/.Python
car cela a cassé la création de virtualenv.rmvirtualenv <env_name>
et supprimerez toutes ses dépendances alignées :) Voir plus sur: virtualenvwrapper.readthedocs.io/en/latest/…Je n'ai pas pu créer un nouveau virtualenv par dessus l'ancien. Mais il y a des outils dans pip qui permettent de réinstaller les exigences beaucoup plus rapidement dans un tout nouveau venv. Pip peut construire chacun des éléments de votre requirements.txt dans un package de roue et le stocker dans un cache local. Lorsque vous créez un nouveau venv et exécutez l'installation de pip dedans, pip utilisera automatiquement les roues prédéfinies s'il les trouve. Les roues s'installent beaucoup plus rapidement que l'exécution de setup.py pour chaque module.
Mon ~ / .pip / pip.conf ressemble à ceci:
J'installe wheel (
pip install wheel
), puis je lancepip wheel -r requirements.txt
. Cela stocke les roues construites dans le répertoire wheel dans mon pip.conf.À partir de là, chaque fois que je pose une de ces exigences, il les installe à partir des roues, ce qui est assez rapide.
la source
Comment mettre à niveau la version Python pour un projet virtualenvwrapper existant et conserver le même nom
J'ajoute une réponse pour tous ceux qui utilisent l'excellent virtualenvwrapper de Doug Hellmann car les réponses existantes ne l'ont pas fait pour moi.
Un certain contexte:
python3 -m venv
, il ne prend pas en charge les environnements Python 2mkproject
ce qui crée l'environnement virtuel, crée un répertoire de projet vide et y crée des CDworkon
commande de virtualenvwrapper pour activer n'importe quel projet quelle que soit la version de PythonInstructions:
Supposons que votre projet existant porte un nom
foo
et exécute actuellement Python 2 (mkproject -p python2 foo
), bien que les commandes soient les mêmes, que vous passiez de 2.x à 3.x, 3.6.0 à 3.6.1, etc. Je suppose également que vous ' re actuellement à l'intérieur de l'environnement virtuel activé.1. Désactivez et supprimez l'ancien environnement virtuel:
Notez que si vous avez ajouté des commandes personnalisées aux crochets (par exemple,
bin/postactivate
) vous devez les enregistrer avant de supprimer l'environnement.2. Cachez le vrai projet dans un répertoire temporaire:
3. Créez le nouvel environnement virtuel (et le répertoire du projet) et activez:
4. Remplacez le répertoire du projet généré vide par le projet réel, revenez au répertoire du projet:
5. Réinstallez les dépendances, confirmez la nouvelle version de Python, etc.:
S'il s'agit d'un cas d'utilisation courant, je vais envisager d'ouvrir un PR pour ajouter quelque chose comme
$ upgradevirtualenv
/$ upgradeproject
à virtualenvwrapper.la source
Cette approche fonctionne toujours pour moi:
Pris à partir de:
la source
J'ai déplacé mon répertoire personnel d'un Mac à un autre (Mountain Lion à Yosemite) et je ne me suis pas rendu compte du virtualenv cassé jusqu'à ce que je perde le contrôle de l'ancien ordinateur portable. J'ai fait installer le point virtualenv vers Python 2.7
brew
et depuis que Yosemite est venu avec Python 2.7, je voulais mettre à jour mon virtualenv vers le système python. Lorsque j'ai couruvirtualenv
au-dessus du répertoire existant, j'obtenais uneOSError: [Errno 17] File exists: '/Users/hdara/bin/python2.7/lib/python2.7/config'
erreur. Par essais et erreurs, j'ai contourné ce problème en supprimant quelques liens et en corrigeant quelques autres manuellement. C'est ce que j'ai finalement fait (similaire à ce que @Rockalite a fait, mais plus simple):Après cela, j'ai pu simplement exécuter virtualenv sur le répertoire existant.
la source
Sur OS X ou macOS utilisant Homebrew pour installer et mettre à niveau Python3, je devais supprimer les liens symboliques avant
python -m venv --upgrade ENV_DIR
fonctionner.J'ai enregistré ce qui suit dans upgrade_python3.sh donc je me souviens combien de mois à partir de maintenant quand je dois le faire à nouveau:
MISE À JOUR: alors que cela semblait bien fonctionner au début, lorsque j'ai exécuté py.test, cela a donné une erreur. Au final, je viens de recréer l'environnement à partir d'un fichier d'exigences.
la source
py.test
ne fonctionne pas car `~ / .virtualenvs / myenv / bin / python3.7 n'est pas un lien symbolique, donc ne se met pas à jour.~/.virtualenvs/myenv/.Python
un lien symbolique.Si vous utilisez
pipenv
, je ne sais pas s'il est possible de mettre à niveau un environnement en place, mais au moins pour les mises à niveau de versions mineures, il semble être assez intelligent pour ne pas reconstruire les packages à partir de zéro lorsqu'il crée un nouvel environnement. Par exemple, de 3.6.4 à 3.6.5:la source
Je veux juste clarifier, parce que certaines des réponses se réfèrent
venv
et d'autres se réfèrentvirtualenv
.L'utilisation de l' indicateur
-p
ou--python
est prise en chargevirtualenv
, mais pas activéevenv
. Si vous avez plusieurs versions de Python et que vous souhaitez spécifier celle avec laquelle créer levenv
, faites-le sur la ligne de commande, comme ceci:Vous pouvez bien sûr mettre à niveau avec
venv
comme d'autres l'ont souligné, mais cela suppose que vous avez déjà mis à niveau le Python qui a été utilisé pour créer celavenv
en premier lieu. Vous ne pouvez pas mettre à niveau vers une version Python que vous n'avez pas déjà sur votre système quelque part, alors assurez-vous d'obtenir la version que vous voulez, d'abord, puis faites-en tous les vénvs que vous voulez.la source
Étape 1: Gel des exigences et sauvegarde de l'environnement existant
Étape 2: installer Python 3.7 et activer l'environnement virutal
Étape 3: installer les exigences
la source
Pour tous ceux qui ont le problème
Vous devez installer python3.6-venv
la source