/ / La activación de un VirtualEnv usando un script de shell no parece funcionar - shell, terminal, virtualenv

Activar un VirtualEnv usando un script de shell no parece funcionar - shell, terminal, virtualenv

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 № 1

Debe 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)