python-3.x - entorno - virtualenv debian
¿Cómo puedo activar un pyvenv vitrualenv desde python?(activate_this.py fue eliminado?) (2)
Estoy usando Python 3.4, y habiendo creado un pyvenv, estoy buscando activarlo desde dentro de un proceso de python. Con virtualenv, solía usar activate_this.py
, pero parece que se ha ido en pyvenv.
¿Existe ahora una manera fácil de cambiar efectivamente el intérprete actual al intérprete virtualenv? Probablemente podría meterme con el PATH (que es lo que activate_this.py
hizo), pero me gustaría una forma más simple y más estable.
Esto es para usar en wsgi.py.
pyvenv
y venv
no son compatibles con esto de venv
. El paquete de terceros virtualenv
admite esto utilizando activate_this.py
, pero esa característica no se incluyó en el módulo de venv
.
Podría intentar tomar prestada una copia de activate_this.py
de un entorno basado virtualenv
; parece funcionar, aunque no puedo jurar que sea perfecto ( venv
/ pyvenv
usa algo de magia durante el inicio, no está claro si todo se replica a través de activate_this.py
).
Los documentos virtualenv
están desfasados para Python 3 (afirman que usas execfile
, que no existe). La alternativa compatible con Python 3 sería:
activator = ''some/path/to/activate_this.py'' # Looted from virtualenv; should not require modification, since it''s defined relatively
with open(activator) as f:
exec(f.read(), {''__file__'': activator})
Nada de lo que activate_this.py
hace es mágico, por lo que puedes realizar los mismos cambios manualmente sin sys.path
de virtualenv
(ajustando PATH
, sys.path
, sys.prefix
, etc.), pero pedir prestado lo hace mucho más simple en este caso.
Utilicé un enfoque diferente utilizado en virtualenv
mismo:
# the current Python interpreter is not from the virtual environment
file = __file__
if file.endswith(''.pyc''):
file = file[:-1]
venv_executable = PROJECT_DIR / ''venv'' / ''bin'' / ''python''
popen = subprocess.Popen([venv_executable, file] + sys.argv[1:])
raise SystemExit(popen.wait())