venv create activate python windows scripting batch-file virtualenv

create - lote equivalente de "fuente" en windows: cómo ejecutar un script python desde un virtualenv



virtualenv in python 3 (3)

Diría que solo tiene que anteponer ''invocar'' a su invocación a activate.bat, para asegurarse de que el archivo por lotes actual se reanude después de que se ejecute la activación:

call %~dp0env/Scripts/activate.bat

Considere hacer lo mismo para deactivate.bat. Además, si desea asegurarse de que el entorno cmd.exe actual no esté contaminado por una llamada a su archivo por lotes, considere envolver sus comandos en un par de comandos setlocal / endlocal .

Por lo tanto, he hecho bastantes secuencias de comandos bash, pero muy pocas secuencias de comandos por lotes en Windows. Estoy intentando activar un virtualenv de python, ejecutar un script de python, luego desactivar el virtualenv cuando sale el script.

Tengo una carpeta llamada env, que es mi virtualenv, y una carpeta llamada work, que contiene mis scripts

Esto es lo que tengo hasta ahora:

%~dp0env/Scripts/activate.bat python %~dp0work/script.py deactivate

Sin embargo, cuando ejecuto el script, activa el virtualenv y luego se detiene. No llega a la segunda línea y ejecuta el script de Python. ¿Hay alguna forma de "fuente" de la carpeta de secuencias de comandos de activación, para que el resto del script por lotes se pueda ejecutar como si hubiera llamado a activate.bat desde la línea de comandos?



Supongo que solo quiero ejecutar los mismos comandos en Windows como si se esperara en linux bash / shell. Cuando quiero comenzar un virtualenv, estoy en su directorio principal, el comando de Linux sería "fuente bin / activar". No es problema simular este comportamiento en Windows. Personalmente, he puesto un nombre de archivo por lotes activate.bat en algún lugar de PATH así:

:: activate.bat @echo off REM source bin/activate if "%1" == "bin/activate" ( if not EXIST "%CD%/Scripts/activate.bat" goto notfound set WRAPEX=Scripts/activate.bat ) ELSE ( set WRAPEX=%* ) call %WRAPEX% goto :eof :notfound echo Cannot find the activate script -- aborting. goto :eof