Install py-pip avec droits limités : contourner les restrictions d’installation

Sur un poste d’entreprise verrouillé ou un serveur partagé, lancer pip install renvoie souvent une erreur de type « permission denied ». Le répertoire site-packages du système n’est pas accessible en écriture pour un compte utilisateur standard. Trois mécanismes permettent de contourner cette restriction sans jamais demander de droits administrateur : l’installation en mode utilisateur, l’environnement virtuel et l’installation hors ligne.

Pourquoi pip refuse l’installation sans droits admin

Par défaut, pip tente d’écrire les paquets dans le répertoire site-packages lié à l’interpréteur Python du système. Sur Linux, ce dossier se trouve généralement sous /usr/lib/python3.x/. Sur Windows, il est dans C:\Program Files\Python3xx\. Ces chemins appartiennent à root ou à l’administrateur local.

A lire en complément : Quels sont les inconvénients d'un système automatisé ?

Quand un compte utilisateur standard lance pip install requests, le système de fichiers bloque l’écriture. Le message d’erreur varie selon l’OS, mais le mécanisme est identique : le processus pip n’a pas les permissions d’écriture sur le répertoire cible.

Depuis les versions récentes de pip, un basculement automatique vers le mode utilisateur se déclenche quand le répertoire système n’est pas accessible en écriture. Le message affiché est alors : Defaulting to user installation because normal site-packages is not writeable. Ce comportement est désormais recommandé plutôt que l’usage systématique d’un compte administrateur.

A lire aussi : Quels sont les modèles d’autorisation ?

Femme développeuse Python résolvant des erreurs de permissions pip sur un ordinateur portable dans un appartement moderne

Flag –user : installer un paquet pip dans le répertoire personnel

L’option --user force pip à écrire les fichiers dans un répertoire propre au compte utilisateur, distinct du site-packages système.

Emplacements selon l’OS

  • Sur Linux et macOS, les paquets atterrissent dans ~/.local/lib/python3.x/site-packages/ et les scripts dans ~/.local/bin/
  • Sur Windows, le chemin est %APPDATA%\Python\Python3xx\site-packages\
  • La variable PYTHONUSERBASE permet de rediriger cet emplacement vers un dossier arbitraire, utile quand le home est lui-même sur un partage réseau restreint

La commande complète : python -m pip install --user nom_du_paquet. Sur Windows, remplacer python par py.

Limite principale du flag –user

Les scripts installés dans ~/.local/bin/ ne sont pas toujours dans le PATH. Après une première installation avec --user, vérifiez que ce dossier figure dans votre variable d’environnement. Sans cela, les commandes fournies par le paquet (comme flask, black ou pytest) ne seront pas trouvées par le shell.

Le flag --user ne fonctionne pas à l’intérieur d’un environnement virtuel. pip le refuse explicitement, car l’environnement virtuel possède déjà son propre répertoire d’installation isolé.

Environnement virtuel Python : la solution standard aux restrictions de permissions

Créer un environnement virtuel contourne le problème à la racine. Au lieu de modifier un répertoire système, on crée un répertoire dédié au projet, dans lequel pip écrit librement.

La commande de base avec le module intégré à Python 3 :

python -m venv mon_env

Puis activation selon l’OS :

  • Linux/macOS : source mon_env/bin/activate
  • Windows (PowerShell) : .\mon_env\Scripts\Activate.ps1
  • Windows (cmd) : .\mon_env\Scripts\activate.bat

Une fois l’environnement activé, pip install écrit dans mon_env/lib/python3.x/site-packages/. Aucun droit administrateur requis, aucun conflit avec les paquets système, aucune interférence entre projets.

Quand venv n’est pas disponible

Sur certaines distributions Linux (Debian, Ubuntu), le module venv n’est pas inclus par défaut avec le paquet python3. L’erreur typique est ensurepip is not available. Le paquet système python3-venv doit être installé, ce qui requiert parfois des droits admin. Dans ce cas précis, le flag --user reste le recours immédiat.

Sur un poste où ni venv ni --user ne fonctionnent (politiques de groupe Windows bloquant l’écriture même dans le profil utilisateur), une version portable de Python constitue la dernière option viable. Il suffit de décompresser une archive Python dans un dossier accessible, puis d’utiliser son pip intégré.

Professionnel IT configurant pip en environnement virtuel sur un poste de travail en open space corporate

Installation pip hors ligne : travailler sans accès à PyPI

Les postes déconnectés d’Internet posent un problème différent. Pip ne peut pas télécharger les paquets depuis PyPI. La solution repose sur un transfert manuel de fichiers wheel (format .whl).

Procédure en trois étapes

Sur une machine connectée, télécharger le paquet et toutes ses dépendances dans un dossier local :

pip download nom_du_paquet -d ./paquets_offline

Cette commande récupère les fichiers wheel (ou les archives source quand le wheel n’existe pas) pour le paquet cible et chaque dépendance transitive. Le dossier paquets_offline contient ensuite tout le nécessaire.

Transférer ce dossier sur la machine cible (clé USB, partage réseau interne, dépôt d’artefacts). Puis installer sans connexion :

pip install --no-index --find-links=./paquets_offline nom_du_paquet

L’option --no-index empêche pip de chercher sur PyPI. --find-links pointe vers le répertoire contenant les fichiers téléchargés. L’ordre de résolution des dépendances est géré automatiquement par pip à partir des métadonnées de chaque wheel.

Piège fréquent avec les fichiers wheel

Un fichier wheel est compilé pour une version précise de Python et un OS donné. Un wheel téléchargé sur Python 3.11 sous Windows ne s’installera pas sur Python 3.10 sous Linux. Vérifiez la compatibilité en lisant le nom du fichier : nom-version-cpXX-cpXX-plateforme.whl. Les wheels dits « pure Python » (suffixe py3-none-any) fonctionnent sur toutes les plateformes.

Diagnostic rapide des erreurs de permission pip

Avant de choisir une méthode, identifiez la cause exacte du blocage. Lancez pip install --verbose nom_du_paquet et lisez les dernières lignes avant l’erreur. Le chemin du répertoire refusé indique la méthode adaptée.

Si le chemin refusé est le site-packages système, --user ou un environnement virtuel suffisent. Si l’erreur concerne un répertoire temporaire ou le cache pip, la variable PIP_CACHE_DIR permet de rediriger le cache vers un emplacement autorisé : export PIP_CACHE_DIR=/chemin/accessible/cache.

Sur Windows, les politiques de groupe peuvent bloquer l’exécution de scripts PowerShell, empêchant l’activation de l’environnement virtuel. La parade consiste à appeler pip directement sans activer l’environnement : mon_env\Scripts\python.exe -m pip install nom_du_paquet. Le résultat est identique, sans passer par le script d’activation.

La majorité des erreurs « permission denied » avec pip se résolvent par un environnement virtuel ou le flag --user. Les cas restants relèvent de politiques système restrictives qui nécessitent une version portable de Python ou un transfert hors ligne de fichiers wheel.

Ne ratez rien de l'actu