Lot équivalent de la “source” sur Windows: comment faire pour exécuter un script Python à partir d'un virtualenv
J'ai fait un peu juste de scripts bash, mais très peu de lots de script sur Windows. Je suis en train d'activer un Python virtualenv, exécuter un script Python, puis désactiver le virtualenv lorsque le script se termine.
J'ai un dossier appelé env
, qui est mon virtualenv, et un dossier appelé travail, qui contient mes scripts.
C'est ce que j'ai obtenu jusqu'à présent:
%~dp0env\Scripts\activate.bat
python %~dp0work\script.py
deactivate
Cependant, lorsque je lance le script, il active le virtualenv, puis s'arrête. Il ne pas arriver à la deuxième ligne et exécuter le script Python. Est-il un moyen de "source" activer le script de dossier, de sorte que le reste du lot script peut être exécuté que si j'avais appelé à l' activate.bat
à partir de la ligne de commande?
Vous devez vous connecter pour publier un commentaire.
Je dirais que vous avez juste besoin d'ajouter le préfixe "appel" pour votre activer.chauve-souris invocation, pour s'assurer que la fichier de commandes est repris après l'activer est exécutée:
Envisager de faire la même chose pour
deactivate.bat
. En outre, si vous voulez vous assurer que le courant cmd.exe l'environnement n'est pas polluée par un appel à un fichier batch, il est recommandé de mettre vos commandes dans unsetlocal
/endlocal
commande paire.batch2.bat
etecho 1
, et batch2.bat contientecho 2
, et je batch1.chauve-souris, je vois un nouveau shell ouvrir, puis2
, puis1
, donc je ne pense pas que ce soit le problème.call
commande l'exécution de l'appel lot est remplacé à l'exécution de l'appelé, c'est à dire des instructions que dans le lot d'appel sont rejetées. Avec lecall
exécution de la commande de l'appel lot reprend après l'appela l'un se termine.J'ai fait un .lnk fichier qui pointe vers
cmd /k "path/to the/script/activate.bat"
, et il fonctionne.CMD paramètres & options
Je suppose que vous voulez juste pour exécuter les mêmes commandes dans Windows comme si prévu dans Linux Bash/shell. Quand je veux démarrer un virtualenv je suis en fait dans son répertoire, et la commande de Linux serait "source bin/activate".
Il n'est pas un problème pour simuler ce comportement sur Windows. Moi personnellement, j'ai mis un fichier de commandes nommé
activate.bat
quelque part sur la variable d'environnement PATH comme ceci: