Activer un VirtualEnv en utilisant un script shell ne semble pas fonctionner

j'ai essayé d'activer un VirtualEnv à travers un script shell comme celui ci-dessous mais il ne semble pas fonctionner,

#!/bin/sh
source ~/.virtualenvs/pinax-env/bin/activate

j'obtiens l'erreur suivante

$ sh virtualenv_activate.sh 
virtualenv_activate.sh: 2: source: not found

mais si j'entre la même commande sur terminal cela semble fonctionner

$ source ~/.virtualenvs/pinax-env/bin/activate
(pinax-env)gautam@Aspirebuntu:$

alors j'ai changé le script shell en

#!/bin/bash
source ~/.virtualenvs/pinax-env/bin/activate

tel que suggéré et utilisé

$ bash virtualenv_activate.sh 
gautam@Aspirebuntu:$

pour exécuter le script .

cela ne jette pas d'erreur, mais cela n'active pas non plus le virtuel env

alors une suggestion sur la façon de résoudre ce problème ?

PS : J'utilise Ubuntu 11.04

37
demandé sur Gautam 2011-09-10 06:03:47

3 réponses

TLDR

Doit exécuter le .sh script source au lieu du script uniquement

source your-script.sh

et pas your-script.sh

Détails

h n'est pas la même chose que bash (bien que certains systèmes lient simplement sh à bash, donc exécuter sh exécute en fait bash). Vous pouvez penser sh comme une version édulcorée de bash. Une chose que bash a que le poisson n'est la commande "source". C'est pourquoi vous obtenez cette erreur... la source fonctionne bien dans votre bash Shell. Mais lorsque vous démarrez votre script en utilisant sh, vous exécutez le script dans un shell dans un sous-processus. Puisque ce script est en cours d'exécution dans sh," source " n'est pas trouvé.

la solution est d'exécuter le script dans bash à la place. Modifier la première ligne...

#!/bin/bash

Puis courir avec...

./virtualenv_activate.sh

...ou...

/bin/bash virtualenv_activate.sh

Edit:

si vous voulez que l'activation du virtualenv change le shell que vous appelez le script à partir de, vous devez utiliser le "source" ou "opérateur de point". Cela garantit que le script est exécuté dans le shell courant (et donc des changements de l'environnement actuel)...

source virtualenv_activate.sh

...ou...

. virtualenv_activate.sh

en tant que note d'accompagnement, c'est pourquoi virtualenv dit toujours que vous devez utiliser "source" pour lancer son script d'activation.  

49
répondu Mark Hildreth 2018-07-28 08:53:11

source est une commande de shell intégrée à bash, et n'est pas disponible en sh. Si je me souviens bien, l'env virtuel fait beaucoup de manipulation de variables de chemin et d'environnement. Même en cours d'exécution bash virtualenv_blah.sh wont ne fonctionne pas puisque cela va simplement créer l'environnement à l'intérieur du sous-shell.

. virtualenv_activate.sh ou source virtualenv_activate.sh cela permet au script de fonctionner dans votre environnement actuel et toutes les variables d'environnement modifiées par activate virtualenv seront disponible.

HTH.

Edit: Voici un lien qui pourrait aider - http://ss64.com/bash/period.html

7
répondu arunkumar 2011-09-10 03:52:24

sur Mac OS X vos propositions ne semblent pas fonctionner.

j'ai fait de cette manière. Je ne suis pas très content de la solution, mais partagez-la quand même ici et espérez, que peut-être quelqu'un suggérera la meilleure:

activate.sh j'ai

echo 'source /Users/andi/.virtualenvs/data_science/bin/activate'

je donne des autorisations d'exécution par: chmod +x activate.sh

Et j'ai l'exécution de cette manière:

`./activate.sh`

notez Qu'il y a paranthèse sous forme de code ASCII 96 = ` ( grave accent )

5
répondu Andrzej Kostański 2017-09-13 08:58:57