Recherche de site Web

Migrer des packages Python entre des environnements virtuels sous Linux


Déplacer vos paquets Python d'un environnement virtuel à un autre est très facile. Ce guide vous montrera exactement comment migrer des paquets Python entre des environnements virtuels sous Linux.

Dans ce guide, nous expliquerons :

  • Comment exporter des packages de votre ancien environnement virtuel,
  • Instructions étape par étape pour créer un nouvel environnement
  • Comment installer tous les paquets dans le nouvel environnement,
  • Problèmes courants et comment les résoudre
  • Meilleures pratiques pour gérer les environnements Python
  • et quelques questions fréquemment posées avec leurs réponses.

Commençons !

Qu'est-ce que les environnements virtuels ?

Considérez un environnement virtuel comme un espace de travail séparé pour chaque projet Python. Il maintient vos projets propres et organisés. Chaque environnement a son propre ensemble de packages.

Les environnements virtuels sont importants lorsque l'on travaille sur plusieurs projets. Par exemple, imaginez que vous avez deux projets. L'un utilise Python 3.11, et l'autre nécessite Python 3.12.

Sans environnements virtuels, vous ne pouvez pas utiliser les deux versions en même temps. Si vous installez deux versions différentes du même paquet dans votre environnement Python global, la deuxième installation écrase la première.

Les environnements virtuels résolvent ce problème en gardant tout séparé. Cela signifie que vous pouvez travailler sur plusieurs projets sans aucun conflit.

Quand devriez-vous migrer des packages ?

Vous pourriez avoir besoin de déplacer des paquets lorsque :

  • Repartir à zéro : Vous voulez un environnement propre sans vieux encombrement
  • Corruption de l'environnement : Votre environnement actuel a été endommagé ou est en désordre
  • Mise à niveau de Python : Vous passez à une version plus récente de Python
  • Nouvelle configuration informatique : Vous devez reproduire votre configuration sur une autre machine
  • Changement d'outils : Vous passez d'un gestionnaire de paquets à un autre

Les environnements virtuels doivent être considérés comme temporaires. S'ils sont corrompus ou trop encombrés, il est souvent plus facile de les supprimer et de les recréer que de les réparer.

Guide étape par étape pour migrer des packages Python d'un environnement virtuel à un autre

Les environnements virtuels permettent de garder les dépendances Python isolées par projet. Vous pouvez copier tous vos modules installés d'un environnement à un autre en seulement deux étapes simples :

  1. Exporter la liste des packages en utilisant pip freeze
  2. Installez-les dans le nouvel environnement en utilisant pip install -r requirements.txt

À des fins de démonstration de ce guide, j'utiliserai deux environnements virtuels, à savoir Mypyenv (actuel) et Pyenv (nouveau). Voyons comment migrer tout de Mypyenv vers Pyenv en seulement 9 étapes simples.

D'abord, vous enregistrerez une liste de ce qui est installé. Ensuite, vous utiliserez cette liste pour installer tout dans le nouvel environnement.

Étape 1 : Activez votre environnement virtuel actuel

Ouvrez votre terminal et activez l'environnement actuel (ancien) que vous souhaitez copier. Dans mon cas, il s'agit de Mypyenv.

Pour activer un environnement virtuel, exécutez :

source Mypyenv/bin/activate

Remplacez ~/Mypyenv par le chemin réel de votre environnement.

Vous verrez « (Mypyenv) » dans votre invite. Cela montre qu'il est actif.

(Mypyenv) ostechnix@pvedebian:~$ 

Activez votre environnement virtuel Python

Étape 2 : Créer un fichier de requirements

Maintenant, enregistrez tous vos packages installés dans un fichier. Ce fichier listera chaque package et son numéro de version.

Pour ce faire, exécutez cette commande :

python -m pip freeze > requirements.txt

Ou simplement :

pip freeze > requirements.txt

Cela crée un fichier appelé requirements.txt. Il contient tous vos packages. La commande pip freeze génère une sortie adaptée à un fichier de requirements.

Vous voulez voir ce qu'il y a à l'intérieur ? Ouvrez simplement le fichier.

cat requirements.txt

Vous verrez quelque chose comme ceci :

anyio==4.4.0
argon2-cffi==23.1.0
argon2-cffi-bindings==21.2.0
arrow==1.3.0
asttokens==3.0.0
async-lru==2.0.4
attrs==24.3.0
[...]

Étape 3 : Passez en revue votre fichier de exigences (Optionnel)

Le fichier des exigences inclut tous les paquets, même ceux que vous n'avez pas installés directement. Ceux-ci sont appelés des dépendances.

Pour un fichier plus propre, vous pouvez supprimer les sous-dépendances. Gardez seulement les principaux paquets que vous utilisez réellement. Lors d'un pip freeze, non seulement les paquets spécifiés par vous apparaissent, mais aussi les dépendances installées par ces paquets.

Cependant, si vous n'êtes pas sûr de ceux à supprimer, il est plus sûr de tout garder. Cela fonctionnera très bien.

Étape 4 : Désactivez votre environnement actuel

Avant d’aller de l’avant, désactivez votre environnement actuel, c’est-à-dire Mypyenv :

deactivate

Votre invite reviendra à la normale. Cela signifie que vous êtes de retour dans votre environnement Python global.

Étape 5 : Créez votre nouvel environnement virtuel

Maintenant, créons un nouvel environnement virtuel appelé Pyenv. Choisissez d'abord un emplacement pour celui-ci.

Utilisation de venv (intégré à Python 3.3+) :

python3 -m venv Pyenv

Cela crée un dossier appelé Pyenv. Il contient une installation propre de Python prête à l'emploi.

Étape 6 : Activez votre nouvel environnement

Basculez vers votre nouvel environnement Pyenv créé en utilisant la commande :

source Pyenv/bin/activate

Encore une fois, vous verrez « (Pyenv) » apparaître dans votre invite.

(Pyenv) ostechnix@pvedebian:~$ 

Étape 7 : Installer tous les packages à partir du fichier des exigences

Maintenant, installez tout avec une seule commande :

pip install -r requirements.txt

Vous pouvez générer un fichier de requirements puis l’installer dans un autre environnement. Cette commande lit votre fichier requirements.txt et installe chaque paquet qui y est listé.

Cela pourrait prendre quelques minutes en fonction du nombre de colis que vous avez. Attendez simplement que ce soit terminé.

Étape 8 : Vérifiez que tout est installé correctement

Vérifiez que tous les packages sont présents dans votre environnement Pyenv :

pip list
pip check

Cela montre tout ce qui est installé dans Pyenv. Comparez-le avec votre fichier requirements.txt pour vous assurer que rien ne manque.

Vous pouvez également tester votre projet. Exécutez votre script principal pour voir s'il fonctionne sans erreurs.

Étape 9 : Supprimer l'ancien environnement (Facultatif)

Une fois que vous avez vérifié que le nouvel environnement Pyenv fonctionne parfaitement, vous pouvez supprimer l'ancien dossier Mypyenv. Tout d'abord, assurez-vous de l'avoir désactivé :

deactivate

Ensuite, supprimez simplement le dossier Mypyenv :

rm -rf Mypyenv

Ou supprimez-le simplement via votre gestionnaire de fichiers. Les environnements virtuels sont conçus pour être jetables, donc ne vous inquiétez pas de les supprimer.

Conseils importants à retenir

Toujours utiliser des versions spécifiques

Lorsque vous migrez des paquets, vous voulez exactement les mêmes versions. Sinon, votre code pourrait se casser. C'est pourquoi la commande pip freeze inclut des numéros de version comme terminado==0.18.1.

Gardez votre fichier de exigences à jour

Chaque fois que vous ajoutez un nouveau package à votre projet, mettez à jour votre fichier de dépendances. Cela le maintient à jour :

pip freeze > requirements.txt

Faites-en une habitude. Cela vous évite des ennuis plus tard.

Utilisez des environnements virtuels pour chaque projet

Les environnements virtuels doivent toujours être utilisés à moins que Python ne soit utilisé pour la gestion de serveur ou l’exécution de scripts simples. Ils préviennent les conflits et maintiennent vos projets organisés.

Créez un nouvel environnement chaque fois que vous commencez un nouveau projet. Cela ne prend que quelques secondes.

Ne pas engager les environnements virtuels dans Git

Votre dossier d'environnement virtuel peut être énorme. Parfois, il dépasse 100 Mo. Ajoutez venv/ à votre .gitignore pour ne pas le commettre par accident.

Au lieu de cela, engagez votre fichier requirements.txt. Les autres développeurs peuvent l'utiliser pour créer leurs propres environnements.

Résolution des problèmes courants

1. Aucun module nommé pip

Cela se produit lorsque votre ancien environnement n'a pas pip installé ou que pip est manquant.

Solution :

Vous pouvez le réparer en réinstallant pip dans l'ancienne environnement :

source ~/Mypyenv/bin/activate
python -m ensurepip --upgrade

Remplacez ~/Mypyenv par le chemin réel de votre environnement.

Si cela ne fonctionne pas, utilisez :

curl -sS https://bootstrap.pypa.io/get-pip.py | python

Essayez ensuite d'exporter à nouveau :

python -m pip freeze > requirements.txt

Si l'environnement est trop endommagé, vous pouvez toujours vérifier son dossier site-packages :

ls ~/Mypyenv/lib/python*/site-packages/

À partir de là, notez les noms des principaux paquets et réinstallez-les manuellement dans votre nouvel environnement.

2. Aucune distribution correspondante trouvée pour apt-offline

Je reçois cette erreur spécifique sur mon système Debian. apt-offline est un outil système, pas un package PyPI.

Solution :

Supprimez-le de requirements.txt, ou filtrez automatiquement les paquets au niveau du système :

grep -vE '^(apt-offline|python-apt|apturl|pygobject|dbus|systemd)' requirements.txt > clean-requirements.txt
pip install -r clean-requirements.txt

Si vous en avez vraiment besoin :

sudo apt install apt-offline

3. Pip Freeze Montre Trop de Packages

Parfois, pip freeze liste des paquets de votre installation Python globale. Cela se produit si votre environnement virtuel n'a pas été correctement créé.

Solution :

Créez un environnement frais. Assurez-vous de l'activer avant d'exécuter pip freeze. Ensuite, installez seulement les paquets dont vous avez besoin.

4. Certains packages ne s’installent pas

Il arrive parfois qu'un paquet ne puisse pas être installé. Cela peut se produire pour plusieurs raisons :

  • La version du paquet est trop ancienne
  • Votre version de Python est incompatible
  • Le package nécessite des dépendances au niveau du système

Solution :

Essayez d'installer les packages un par un. Lorsqu'un échoue, regardez le message d'erreur. Il vous indique généralement ce qui ne va pas. Vous devrez peut-être mettre à jour le numéro de version ou installer d'abord les dépendances système.

5. Votre code fonctionne dans l'ancien environnement mais pas dans le nouveau

Habituellement, cela signifie qu'une version du paquet a changé et a causé un problème.

Solution :

Vérifiez votre version de Python dans les deux environnements. Assurez-vous qu'elles correspondent :

python --version

S'ils sont différents, cela pourrait être le problème. De plus, regardez attentivement votre fichier requirements.txt. Assurez-vous que toutes les versions sont correctement fixées.

6. Aucun fichier ou répertoire de ce type : /usr/src/packages/BUILD/crit

Cette erreur signifie que votre ancien environnement incluait une compilation locale (comme crit) qui n’existe pas sur le nouveau système.

Solution :

Vous pouvez le retirer en toute sécurité :

grep -v "crit" requirements.txt > clean-requirements.txt
pip install -r clean-requirements.txt

Ou réinstallez-le depuis la source :

git clone https://github.com/<user>/crit.git
cd crit
pip install .

7. Nettoyer automatiquement toutes les entrées invalides

Solution :

Pour éviter la plupart des problèmes d'installation, filtrez votre requirements.txt de cette façon :

grep -vE '(@ file:|file:///|^apt-|^python-apt|^apturl|^pygobject|^dbus|^systemd)' requirements.txt > clean-requirements.txt
pip install -r clean-requirements.txt

Cela supprime tous les chemins locaux corrompus et les packages système.

8. pip freeze capture trop de choses

pip freeze liste toutes les dépendances, y compris les dépendances imbriquées.

Solution :

Pour créer une liste minimale ne contenant que les imports de premier niveau :

pip install pipreqs
pipreqs /path/to/your/project

Déplacer des packages entre différents ordinateurs

Et si vous devez configurer votre projet sur une machine différente ? Le processus est presque identique.

Tout d'abord, copiez votre fichier requirements.txt sur le nouvel ordinateur. Vous pouvez utiliser Git, le courrier électronique ou une clé USB. Ensuite, sur le nouvel appareil :

  1. Installez Python s'il n'est pas déjà installé
  2. Créer un nouvel environnement virtuel en utilisant les commandes ci-dessus
  3. Activez-le avec la commande d'activation pour votre système d'exploitation
  4. Exécutez pip install -r requirements.txt

C'est tout ! Les environnements virtuels, pip freeze et requirements.txt offrent tous un moyen pratique de gérer les modules Python sur différents systèmes.

Méthodes Alternatives pour la Migration de Packages

Utiliser pip-tools pour une meilleure gestion des dépendances

Certains développeurs préfèrent pip-tools. Il sépare vos packages principaux de leurs dépendances. Cela rend les fichiers de requirements plus clairs et plus faciles à gérer.

Utiliser Poetry ou Pipenv

Ce sont des gestionnaires de paquets modernes qui gèrent automatiquement les environnements virtuels. Ils sont plus avancés que pip et venv.

Poetry est un outil Python riche en fonctionnalités pour la gestion des dépendances des projets. Il est plus rapide que la plupart des outils de gestion d'environnements virtuels et est livré avec une interface en ligne de commande puissante pour gérer les projets Python.

Pipenv est encore un autre outil de gestion de virtualenv. Il créera automatiquement un virtualenv pour vos projets.

Cependant, pour la plupart des projets, l'approche standard avec pip et venv fonctionne parfaitement.

Référence rapide : aide-mémoire

Voici une liste pratique de toutes les commandes dont vous aurez besoin pour migrer des paquets :

Activer Mypyenv :

source Mypyenv/bin/activate

Exporter les packages :

pip freeze > requirements.txt

Désactiver l'environnement :

deactivate

Créer Pyenv :

python3 -m venv Pyenv

Activer Pyenv :

source Pyenv/bin/activate

Installer les packages :

pip install -r requirements.txt

Vérifier l'installation :

pip list

Enregistrez cette référence pour un accès rapide chaque fois que vous aurez besoin de migrer des environnements !

Résumé des meilleures pratiques

Pour tout résumer, voici les points clés à retenir :

  1. Créez des environnements séparés : Créez un environnement virtuel pour chaque projet.
  2. Toujours activer en premier : Activez votre environnement avant d'installer des paquets.
  3. Enregistrez régulièrement : Utilisez pip freeze pour enregistrer votre liste de packages après avoir ajouté de nouveaux packages.
  4. Conservez requirements.txt : Gardez-le dans votre dossier de projet et incluez-le dans le contrôle de version (par ex. Git).
  5. Exclure les dossiers venv : Ne commettez pas les dossiers d'environnement virtuel dans le contrôle de version.
  6. Test après la migration : Exécutez votre code après la migration pour vous assurer que tout fonctionne.
  7. Utilisez le verrouillage des versions : Incluez toujours les numéros de version dans requirements.txt.
  8. Dépendances du document : Ajoutez des commentaires à requirements.txt expliquant pourquoi des versions spécifiques sont nécessaires.
  9. Utilisez python -m pip au lieu de pip pour éviter les incompatibilités d'interpréteur.
  10. Gardez les packages système en dehors des environnements virtuels.
  11. Exécutez pip check après la réinstallation pour confirmer la santé des dépendances.

Questions Fréquemment Posées (FAQ)

Q : Puis-je migrer des paquets entre différentes versions de Python ?

A : Oui, mais fais attention. Certains paquets pourraient ne pas fonctionner avec des versions plus récentes ou plus anciennes de Python. Si tu passes de Python 3.8 à 3.11, par exemple, teste ton code minutieusement après la migration.

Q : Quelle est la différence entre pip freeze et pip list ?

A : Les deux montrent les packages installés, mais pip freeze formate la sortie pour les fichiers de requirements. Utilisez pip freeze > requirements.txt pour la migration et pip list simplement pour voir les packages.

Q : Dois-je inclure tous les packages issus de pip freeze ?

A : Cela dépend. Pip freeze inclut toutes les dépendances. Pour des requirements plus propres, vous pouvez énumérer manuellement uniquement vos dépendances directes. Cependant, inclure tout assure une réplication exacte.

Q : Comment mettre à jour les paquets après la migration ?

A : Tout d'abord, activez le nouvel environnement. Ensuite, exécutez pip install --upgrade package-name pour des paquets spécifiques ou pip install --upgrade -r requirements.txt pour tout mettre à jour.

Q : Puis-je utiliser le même requirements.txt pour plusieurs projets ?

A : Seulement si les projets ont des dépendances identiques. Sinon, chaque projet devrait avoir son propre fichier requirements.txt avec des paquets spécifiques au projet.

Conclusion

Déplacer des paquets Python entre différents environnements virtuels est simple une fois que vous comprenez le processus. Il vous suffit de sauvegarder votre liste de paquets avec pip freeze depuis l'environnement actuel, de créer un nouvel environnement et d'installer à partir de la liste sauvegardée.

Cette méthode fonctionne très bien que vous nettoyiez un ancien environnement, mettiez à jour Python ou configuriez un nouveau système. Cela ne prend que quelques minutes et garantit que votre projet fonctionne exactement de la même manière dans le nouvel environnement que dans l'ancien.

Les environnements virtuels et les fichiers de dépendances rendent le développement Python beaucoup plus fluide et professionnel.

N'oubliez pas, chaque fois que vous commencez un nouveau projet, créez d'abord un nouvel environnement virtuel. Installez vos paquets, figez-les dans un fichier de requirements, et vous êtes prêt !

Ressources :

  • Docs officiels Python - venv et pip
  • documentation pip - pip freeze
  • PEP 508 - Spécifications des dépendances
  • docs officiels de ensurepip