
Tengo el siguiente Makefile
env:
source venv/bin/activate
Cuando hago make env
para activar un entorno virtual de Python, aparece el siguiente error
fuente venv/bin/activate marca: fuente: No existe tal archivo o directorio marca: *** [env] Error 1
Pero cuando copio source venv/bin/activate
y ejecuto en el shell, funciona bien. ¿Necesito configurar el directorio actual dentro del Makefile?
Respuesta1
source
es uncarcasa incorporadacomando, no es un ejecutable que pueda iniciar desde cualquier lugar que no sea un shell. Lo source
que hace es leer y ejecutar el contenido de un archivo.en el shell actual,sin iniciar un nuevo shell.
El propósito de esto es modificar el estado del shell actual (si solo lo hace sh venv/bin/activate
, su shell también ejecutará el contenido del activate
script, pero luego terminará y saldrá).
Pero lo que quieres hacer esmodificar el estado de su make
programa. Ejecutar el activate
script en un shell que genere, de cualquier manera make
, no cambiará nada sobre el entorno que make
ve.
Esto se debe a que cada programa (A) lanzado por otro programa (B) obtiene su propia copia del entorno del programa de lanzamiento (B), que (A) puede cambiar según lo desee, sin afectar el entorno del programa de lanzamiento ( B).
Entonces, lo que quieres hacer no puede funcionar, ni siquiera teóricamente.
Si necesita ejecutar algún Makefile dentro de un venv, primero deberá obtener el activate
script y luego iniciarlo desde el shell modificado make
; no de la otra manera.