web-dev-qa-db-fra.com

virtualenv v16.7.2 powershell activate script: "Vous devez" source "ce script: PS>.. \ ENV \ Scripts \ activate" error

Le problème

La dernière version de virtualenv (16.7.2) sur python v.3.7.4 a 4 lignes supplémentaires pour le script "activate.ps1", qui, lorsqu'il est exécuté sur Windows10 powerhsell, donne l'erreur: You must 'source' this script: PS> . .\ENV\Scripts\activate Comment puis-je réparer ça? (veuillez noter que j'ai lu et fait tout ce qui a été mentionné dans les autres questions du forum ainsi que le manuel de virtualenv concernant Windows et PowerShell.)

Étapes que j'ai prises/choses essayées: **

J'ai défini la stratégie d'exécution sur RemoteSigned (comme recommandé dans d'autres forums):

Get-ExecutionPolicy -List

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine    RemoteSigned

Lorsque je veux activer virtualenv, j'exécute .\ENV\Scripts\activate

Où est le problème

Le problème vient des lignes 3 à 6 du script activate.ps1 qui est généré automatiquement par virtualenv lorsque vous créez un nouvel environnement virtuel:

if (@($null,"Internal") -notcontains $myinvocation.commandorigin) {
    Write-Host -Foreground red "You must 'source' this script: PS> . $($myinvocation.invocationname)"
    exit 33
}

Il paraît que $myinvocation.commandorigin est défini sur Runspace au lieu de Interne

Question

Comment puis-je réparer ça? Des idées? Merci :))) Notez que je ne veux pas régler manuellement chaque génération automatique activate.ps1 fichier.

8
ffarhour

Jetons un œil à ce message d'erreur:

You must 'source' this script: PS> . .\ENV\Scripts\activate

Hmmmm ... - PS> n'est probablement que l'invite, ce qui nous laisse avec ceci:

  . .\ENV\Scripts\activate
# ^
# |
# Check out this guy

Ça, le solitaire . devant le chemin, c'est-à-dire opérateur point-source en PowerShell.

Selon la documentation , il:

Exécute un script dans la portée actuelle afin que toutes les fonctions, alias et variables créés par le script soient ajoutés à la portée actuelle.

Je n'ai pas jeté un œil à virtualenv, mais je suppose qu'il voudra définir un certain nombre de variables et pour s'assurer qu'elles persistent après l'exécution du script, il doit être exécuté dans la portée actuelle.

Voici donc la commande littérale que vous devez exécuter pour le corriger:

. .\ENV\Scripts\activate
9
Mathias R. Jessen

Capture d'écran jointe pour référence. Je viens de rencontrer le même problème mais j'ai fait ce qui suit:

  1. Créez un nouvel environnement virtuel;

    python -m venv directory

  2. Accédez au répertoire nouvellement créé;

    cd directory

  3. Activez l'environnement virtuel.

    .\Scripts\activate

Cela a résolu mon problème. J'espère que ça aide ...

4
Marothi Mahlake

J'ai également fait face à ce problème. Pour résoudre ce problème, j'ai créé un nouvel environnement virtuel comme suit:

python -m venv directory-name

Activer:

Scripts>./activate

Et maintenant ça marche bien ...

4
Shamim Hossen