Résoudre les problèmes d'activation de venv sous Windows PowerShell

1. À propos des problèmes d'activation de venv sous Windows PowerShell

Sous Windows, un environnement virtuel Python créé avec venv peut être activé depuis PowerShell grâce au script Activate.ps1. Il arrive cependant que PowerShell refuse d'exécuter ce script en raison de sa stratégie d'exécution, d'un chemin incorrect, d'un environnement virtuel incomplet ou d'une configuration imposée par l'ordinateur.

Commençons par créer un environnement virtuel nommé .venv dans le dossier courant.

Sortie :

Dans PowerShell, la commande normale d'activation de cet environnement est la suivante.

Sortie possible :

Lorsque cette commande fonctionne, (.venv) apparaît généralement au début de l'invite PowerShell. Si une erreur apparaît à la place, il faut identifier sa cause avant de modifier la configuration du système.

2. Identifier l'erreur d'exécution de Activate.ps1

L'un des problèmes les plus courants survient lorsque PowerShell empêche l'exécution du fichier Activate.ps1. Le message exact dépend de la version et de la langue de Windows, mais il indique généralement que l'exécution des scripts est désactivée ou interdite par la stratégie actuelle.

Lorsque nous essayons d'activer l'environnement avec la commande suivante, PowerShell peut donc retourner une erreur.

Sortie possible :

Cette erreur ne signifie généralement pas que venv est défectueux. Le script Activate.ps1 peut exister parfaitement, mais PowerShell refuse son exécution à cause de la politique appliquée aux scripts.

Avant toute modification, nous pouvons vérifier que le fichier Activate.ps1 existe réellement.

Sortie attendue :

Si PowerShell retourne True, le script existe et nous pouvons poursuivre le diagnostic de la stratégie d'exécution.

3. Vérifier la stratégie d'exécution PowerShell

PowerShell possède un mécanisme appelé Execution Policy qui contrôle les conditions dans lesquelles les scripts peuvent être exécutés. Avant de modifier cette configuration, il est préférable d'afficher les stratégies actuellement appliquées.

La commande suivante affiche la stratégie effective de la session PowerShell actuelle.

Sortie possible :

Une valeur telle que Restricted peut empêcher l'exécution du script Activate.ps1. Pour obtenir un diagnostic plus complet, nous pouvons afficher les stratégies correspondant aux différents niveaux de configuration.

Sortie possible :

Les niveaux MachinePolicy et UserPolicy peuvent notamment refléter des paramètres administratifs ou des stratégies de groupe. Si l'ordinateur appartient à une entreprise, un établissement scolaire ou une organisation, certaines stratégies peuvent être imposées par l'administrateur et ne doivent pas être contournées.

4. Autoriser les scripts pour l'utilisateur avec RemoteSigned

Sur un ordinateur personnel où l'utilisateur est autorisé à modifier sa configuration PowerShell, une solution courante consiste à utiliser la stratégie RemoteSigned pour la portée CurrentUser. Cette modification concerne le compte utilisateur actuel et évite de modifier la stratégie globale de toute la machine.

La commande suivante définit RemoteSigned pour l'utilisateur courant.

Sortie possible :

Après la modification, nous pouvons contrôler la stratégie appliquée à CurrentUser.

Sortie attendue :

Nous pouvons ensuite réessayer l'activation de l'environnement virtuel.

Sortie possible :

RemoteSigned est préférable à l'utilisation permanente d'une politique excessivement permissive. Il ne faut notamment pas modifier inutilement les paramètres de sécurité de PowerShell uniquement pour faire fonctionner venv.

5. Utiliser une autorisation temporaire pour la session PowerShell

Si nous ne souhaitons pas modifier durablement la stratégie de notre compte, PowerShell permet d'appliquer une stratégie uniquement au processus PowerShell courant. Elle disparaît lorsque cette session PowerShell est fermée.

La commande suivante définit RemoteSigned uniquement pour le processus PowerShell actuel.

Sortie possible :

Nous pouvons vérifier la valeur associée à la portée Process.

Sortie attendue :

Le script d'activation peut ensuite être exécuté normalement dans cette session.

Sortie possible :

Lorsque la fenêtre PowerShell est fermée, cette modification de portée Process n'est pas conservée. Il faudra donc la renouveler lors d'une nouvelle session si la stratégie persistante continue à bloquer le script.

6. Vérifier le chemin et le script d'activation de venv

Toutes les erreurs d'activation ne proviennent pas de l'Execution Policy. Une erreur peut simplement être causée par un mauvais dossier de travail ou un chemin incorrect vers Activate.ps1. Nous pouvons commencer par afficher le dossier courant.

Sortie possible :

Nous pouvons ensuite afficher le contenu du dossier Scripts de l'environnement virtuel pour vérifier la présence des exécutables et des scripts d'activation.

Sortie possible :

Si Activate.ps1 n'existe pas ou si le dossier .venv n'existe pas, nous devons vérifier le nom de l'environnement. Par exemple, un environnement nommé venv et non .venv doit être activé avec le chemin correspondant.

Sortie possible :

Si l'environnement est incomplet ou a été déplacé depuis un autre emplacement, il est souvent préférable de le recréer plutôt que d'essayer de réparer manuellement ses fichiers internes.

7. Vérifier que l'environnement virtuel est réellement actif

La présence de (.venv) dans l'invite PowerShell constitue une indication pratique, mais la vérification la plus fiable consiste à contrôler quel interpréteur Python est réellement exécuté.

Après activation, la commande suivante affiche le chemin de l'interpréteur Python courant.

Sortie attendue :

Nous pouvons également vérifier directement la relation entre sys.prefix et sys.base_prefix.

Sortie attendue :

La commande suivante permet de vérifier que pip appartient lui aussi à l'environnement virtuel attendu.

Sortie possible :

Si les chemins affichés contiennent .venv, les commandes Python et pip utilisent bien l'environnement virtuel du projet.

8. Utiliser venv sans l'activer ou avec CMD

L'activation de venv est pratique, mais elle n'est pas indispensable pour utiliser l'environnement virtuel. L'activation modifie principalement le contexte du shell afin que les commandes python et pip correspondent facilement aux exécutables de l'environnement. Nous pouvons appeler directement son interpréteur sans exécuter Activate.ps1.

La commande PowerShell suivante exécute directement le Python contenu dans .venv.

Sortie possible :

Nous pouvons également installer un package avec le pip associé à cet interpréteur sans activer l'environnement.

Sortie possible :

Une autre solution consiste à utiliser l'Invite de commandes Windows au lieu de PowerShell. CMD utilise le script activate.bat et n'est pas concerné de la même manière par la stratégie d'exécution des scripts PowerShell.

Dans CMD, la commande suivante active l'environnement .venv.

Sortie possible :

Ces solutions permettent donc de continuer à travailler avec l'environnement virtuel même lorsqu'il n'est pas souhaitable ou possible de modifier la politique PowerShell.

9. Diagnostiquer les autres problèmes d'activation sous PowerShell

Si Activate.ps1 refuse toujours de fonctionner après la vérification de la stratégie d'exécution, nous pouvons effectuer un diagnostic progressif. Commençons par vérifier que l'environnement virtuel contient bien un interpréteur Python fonctionnel.

Sortie possible :

Si l'exécutable fonctionne, mais que le script d'activation pose problème, nous pouvons à nouveau examiner les stratégies PowerShell par portée.

Sortie possible :

Si MachinePolicy ou UserPolicy possède une valeur imposée par une organisation, une stratégie de groupe peut avoir priorité sur certains réglages locaux. Sur un ordinateur administré, il convient alors de respecter la politique de l'organisation et de contacter l'administrateur si nécessaire.

Si le dossier .venv est endommagé et que les dépendances importantes ont été sauvegardées dans requirements.txt, nous pouvons supprimer puis recréer l'environnement. Sous PowerShell, la commande suivante supprime récursivement le dossier .venv ; il faut donc vérifier soigneusement le chemin avant de l'exécuter.

Sortie :

Nous pouvons ensuite recréer un environnement propre.

Sortie :

Après son activation, les dépendances du projet peuvent être réinstallées à partir du fichier requirements.txt s'il existe.

Sortie possible :

10. À retenir !

Les problèmes d'activation de venv sous Windows PowerShell proviennent souvent de la stratégie d'exécution de PowerShell, mais ils peuvent également être liés à un chemin incorrect, à un environnement virtuel absent ou endommagé, ou à une stratégie administrative imposée à l'ordinateur.

  • python -m venv .venv permet de créer l'environnement virtuel.
  • .\.venv\Scripts\Activate.ps1 permet de l'activer dans PowerShell.
  • Test-Path .\.venv\Scripts\Activate.ps1 vérifie que le script d'activation existe.
  • Get-ExecutionPolicy affiche la stratégie d'exécution effective.
  • Get-ExecutionPolicy -List permet d'examiner les stratégies appliquées aux différentes portées.
  • RemoteSigned avec la portée CurrentUser constitue une solution courante sur un ordinateur personnel lorsque l'utilisateur est autorisé à modifier ce paramètre.
  • La portée Process permet d'appliquer une modification uniquement à la session PowerShell courante.
  • Une stratégie imposée par MachinePolicy ou UserPolicy sur un ordinateur administré ne doit pas être contournée.
  • L'environnement peut être utilisé sans activation en appelant directement .venv\Scripts\python.exe.
  • sys.executable permet de vérifier précisément quel interpréteur Python est utilisé.

Sur un ordinateur personnel où la modification est autorisée, le diagnostic et l'activation peuvent par exemple être effectués avec les commandes suivantes.

Sortie possible :

Si nous préférons ne pas modifier durablement la stratégie de notre compte, nous pouvons limiter la modification à la session PowerShell actuelle.

Sortie possible :

 




Auteur : Younes Derfoufi
Lieu de travail : CRMEF OUJDA
Site Web : www.tresfacile.net
Chaine YouTube : https://www.youtube.com/user/InformatiquesFacile
Me contacter : https://www.tresfacile.net/me-contacter/


Leave a Reply

Your email address will not be published. Required fields are marked *