pip vs apt : installation de packages Python sous Linux

Lorsque vous avez besoin d’un package Python sur Ubuntu ou Debian, la bonne commande d’installation n’est pas toujours évidente. Certains packages proviennent de la distribution via apttandis que d’autres proviennent de l’index des packages Python via pip. Ils résolvent différents problèmes, et les mélanger au mauvais endroit peut casser les outils système ou laisser des projets avec des dépendances conflictuelles.

Ce guide explique quand utiliser aptquand utiliser pipet pourquoi les environnements virtuels Python constituent la valeur par défaut la plus sûre pour les dépendances d’applications.

Guide de décision rapide

Situation Utiliser
Installation d’un outil CLI système maintenu par Ubuntu ou Debian apt
Installer des bibliothèques Python pour un projet pip dans un environnement virtuel
Installer un package qui n’est pas dans les référentiels apt pip dans un environnement virtuel
Installation d’une version de package plus récente que celle fournie par la distribution pip dans un environnement virtuel
Installation d’un outil Python CLI pour votre compte utilisateur pipx
Installer une dépendance requise par un autre package apt apt

Ce que fait chaque outil

apt installe les packages à partir des référentiels de distribution. Packages Python distribués via apttel que python3-requests ou python3-numpysont testés par rapport à la version Python et aux bibliothèques système de cette version Ubuntu ou Debian. Ils s’installent à l’échelle du système et s’intègrent au résolveur de dépendances de distribution.

pip installe les packages à partir du Python Package Index (PyPI). PyPI propose plus de packages et de versions plus récentes que la plupart des référentiels de distribution. pip ne se coordonne pas avec aptil ne sait donc pas de quels packages Python le système d’exploitation est installé ou dont dépend.

Quand utiliser apt

Utiliser apt pour:

  • Outils système écrits en Python, tels que cloud-init, ansibleou certbot. Ces packages sont maintenus en tant que composants système et attendent le système Python.
  • Packages Python requis par d’autres apt forfaits. Si vous installez un outil CLI basé sur Python avec apt et il énumère python3-yaml en tant que dépendance, apt gère cela automatiquement.
  • Serveurs ou conteneurs pour lesquels vous souhaitez des versions reproductibles et testées par la distribution et n’avez pas besoin de la dernière version en amont.

Installez un package Python depuis les dépôts Ubuntu ou Debian avec apt:

Terminal

sudo apt install python3-requests

Le nom du package inclut généralement le python3- préfixe. Après l’installation, le package est disponible pour l’interpréteur système Python et pour les autres packages installés via apt.

Quand utiliser pip

Utiliser pip pour:

  • Dépendances d’application dans un environnement virtuel.
  • Packages non disponibles dans les référentiels de distribution.
  • Packages pour lesquels vous avez besoin d’une version spécifique ou plus récente que apt fournit.

Installer un paquet avec pip dans un environnement virtuel :

Terminal

pip install requests

Dans ce cas, le nom du package PyPI est requeststandis que le package apt équivalent est nommé python3-requests. Cette différence de nom est normale.

Pourquoi sudo pip install est risqué

En cours d’exécution sudo pip install peut placer des packages sur le chemin d’importation Python du système, à côté ou avant les packages gérés par apt. Cela crée deux problèmes :

  1. pip peut remplacer, rétrograder ou masquer les packages dont dépendent les outils système.
  2. Sur Ubuntu 23.04 et versions ultérieures, et Debian 12 et versions ultérieures, pip refuse d’installer Python dans le système par défaut et génère un externally-managed-environment erreur. Cette restriction est intentionnelle.

Le message d’erreur ressemble à :

sortir

error: externally-managed-environment
× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
python3-xyz, where xyz is the package you are trying to
install.

La bonne réponse à cette erreur est d’utiliser un environnement virtuel, et non de remplacer la restriction par --break-system-packages.

Utiliser des environnements virtuels pour les projets

Un environnement virtuel est une installation Python isolée avec son propre site-packages. L’installation de packages à l’intérieur n’affecte pas le système Python ou tout autre environnement :

Terminal

python3 -m venv myenv
source myenv/bin/activate
pip install requests flask gunicorn

Sur Ubuntu et Debian, installez d’abord le support venv si le python3 -m venv la commande n’est pas disponible :

Terminal

sudo apt install python3-venv

Après activate, pip et python pointer vers l’environnement virtuel. Les packages s’installent là-bas au lieu de s’installer à l’échelle du système. Désactivez avec :

Terminal

deactivate

Les environnements virtuels sont la pratique standard pour toute application ou projet Python. Créez-en un par projet, ajoutez-le à .gitignoreet installez les dépendances à partir d’un requirements.txt:

Terminal

pip install -r requirements.txt

Pour une présentation plus complète, consultez notre guide de création d’environnements virtuels Python.

Utiliser pipx pour les outils CLI utilisateur

Si vous souhaitez qu’un outil de ligne de commande Python soit disponible dans votre compte utilisateur, utilisez pipx au lieu de l’installer dans le système Python ou un utilisateur partagé site-packages annuaire. pipx crée un petit environnement virtuel privé pour chaque outil et expose la commande sur votre PATH.

Installer pipx puis installez un outil :

Terminal

sudo apt install pipx
pipx install httpie

C’est un bon choix pour des outils tels que httpie, black, ruffet poetryoù vous souhaitez que la commande soit disponible partout mais ne souhaitez pas que le package soit mélangé dans un environnement de projet.

Vous verrez peut-être encore des guides plus anciens recommander pip install --user. Cela installe les packages sous ~/.local/mais tous les packages au niveau utilisateur partagent le même emplacement et peuvent entrer en conflit les uns avec les autres. Sur les installations Python gérées en externe, pip install --user peut également être rejeté pour la même raison qu’une installation du système. Utiliser pipx pour les outils CLI autonomes et un environnement virtuel pour les bibliothèques de projets.

Où installer pip lui-même

Sur Ubuntu et Debian, le package de distribution pour pip est python3-pip:

Terminal

sudo apt install python3-pip

Cela vous donne le pip commande, mais cela ne signifie pas que vous devez installer des packages dans le système Python. Traitez-le comme le programme d’installation que vous utilisez dans les environnements virtuels. Pour des instructions de configuration détaillées, consultez Comment installer Python Pip sur Ubuntu .

Conclusion

Utiliser apt pour les packages Python appartenant au système d’exploitation, pip dans un environnement virtuel pour les dépendances du projet, et pipx pour les outils CLI Python autonomes. Si vous voyez le externally-managed-environment erreur, créez un environnement virtuel plutôt que de le remplacer par --break-system-packages.