Intenté activar un VirtualEnv a través de un script de shell como el de abajo, pero no parece funcionar,
#!/bin/sh
source ~/.virtualenvs/pinax-env/bin/activate
Obtuve el siguiente error
$ sh virtualenv_activate.sh
virtualenv_activate.sh: 2: source: not found
pero si ingreso el mismo comando en la terminal parece funcionar
$ source ~/.virtualenvs/pinax-env/bin/activate
(pinax-env)gautam@Aspirebuntu:$
Así que cambié el script de shell a
#!/bin/bash
source ~/.virtualenvs/pinax-env/bin/activate
como se sugiere y se usa
$ bash virtualenv_activate.sh
gautam@Aspirebuntu:$
para ejecutar el script.
Eso no produce un error, pero tampoco activa el entorno virtual.
Entonces, ¿alguna sugerencia sobre cómo resolver este problema?
PS: Estoy usando Ubuntu 11.04
Respuestas
46 para la respuesta № 1Debe ejecutar el script .sh con source
en lugar del guión únicamente
source your-script.sh
y no tu-script.sh
Detalles
h no es lo mismo que bash (aunque algunos sistemassimplemente vincule sh a bash, así que ejecutar sh en realidad ejecuta bash). Puedes pensar en sh como una versión diluida de bash. Una cosa que bash tiene que sh no tiene es el comando "source". Esta es la razón por la que está recibiendo ese error ... la fuente se ejecuta bien en su shell bash. Pero cuando inicia su secuencia de comandos con sh, ejecuta la secuencia de comandos en una shell en un subproceso. Dado que la secuencia de comandos se ejecuta en sh, "source " no se encuentra.
La solución es ejecutar el script en bash en su lugar. Cambia la primera línea a ...
#!/bin/bash
Entonces corre con ...
./virtualenv_activate.sh
...o...
/bin/bash virtualenv_activate.sh
Editar:
Si quieres que la activación del virtualenvcambie el shell desde el que llama a la secuencia de comandos; debe utilizar el "origen" o el "operador de punto". Esto garantiza que el script se ejecute en el shell actual (y, por lo tanto, cambie el entorno actual) ...
source virtualenv_activate.sh
...o...
. virtualenv_activate.sh
Como nota al margen, es por esto que virtualenv siempre dice que necesitas usar "source" para ejecutar el script de activación de s.
7 para la respuesta № 2
source
es un comando de shell incorporado en bash, y no está disponible en sh. Si recuerdo correctamente, env virtual hace un montón de manipulación de variables de ruta y entorno. Incluso ejecutándolo como bash virtualenv_blah.sh
no funcionará ya que esto simplemente creará el entorno dentro de la sub-shell.
Tratar . virtualenv_activate.sh
o source virtualenv_activate.sh
esto básicamente hace que la secuencia de comandos se ejecute en su entorno actual y todas las variables de entorno modificadas por la activación de virtualenv estarán disponibles.
HTH.
Editar: Aquí hay un enlace que podría ayudar - http://ss64.com/bash/period.html
5 para la respuesta № 3
En Mac OS X tus propuestas parecen no funcionar.
Lo he hecho así. No estoy muy contento con la solución, pero la comparto de todas formas aquí y espero que tal vez alguien sugiera la mejor:
En activate.sh
yo tengo
echo "source /Users/andi/.virtualenvs/data_science/bin/activate"
Doy permisos de ejecución por: chmod +x activate.sh
Y lo ejecuto de esta manera:
`./activate.sh`
Observe que hay paréntesis en forma de código ASCII 96 = `(Acento grave)