J'ai essayé d'activer un VirtualEnv via un script Shell comme celui ci-dessous mais cela 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 le terminal, cela semble fonctionner
$ source ~/.virtualenvs/pinax-env/bin/activate
(pinax-env)gautam@Aspirebuntu:$
J'ai donc changé le script Shell en
#!/bin/bash
source ~/.virtualenvs/pinax-env/bin/activate
comme suggéré et utilisé
$ bash virtualenv_activate.sh
gautam@Aspirebuntu:$
pour exécuter le script.
Cela ne génère pas d'erreur, mais cela n'active pas non plus l'environnement virtuel
Donc, toute suggestion sur la façon de résoudre ce problème?
PS: j'utilise Ubuntu 11.04
Doit exécuter le script .sh avec source
au lieu du script uniquement
source your-script.sh
et non your-script.sh
sh n'est pas la même chose que bash (bien que certains systèmes lient simplement sh à bash, donc exécuter sh s'exécute en fait bash). Vous pouvez considérer sh comme une version édulcorée de bash. Une chose que bash n'a pas, c'est la commande "source". C'est pourquoi vous obtenez cette erreur ... la source fonctionne bien dans votre shell bash. Mais lorsque vous démarrez votre script à l'aide de sh, vous exécutez le script dans un shell dans un sous-processus. Puisque ce script s'exécute dans sh, "source" est introuvable.
La solution consiste à exécuter le script en bash à la place. Remplacez la première ligne par ...
#!/bin/bash
Ensuite, courez avec ...
./virtualenv_activate.sh
...ou...
/bin/bash virtualenv_activate.sh
Modifier:
Si vous souhaitez que l'activation de virtualenv modifie le shell à partir duquel vous appelez le script, vous devez utiliser "source" ou "opérateur point". Cela garantit que le script est exécuté dans le shell actuel (et modifie donc l'environnement actuel) ...
source virtualenv_activate.sh
...ou...
. virtualenv_activate.sh
En remarque, c'est pourquoi virtualenv dit toujours que vous devez utiliser "source" pour exécuter son script d'activation.
source
est une commande Shell intégrée dans bash, et n'est pas disponible dans sh. Si je me souviens bien, virtual env fait beaucoup de manipulation de variables de chemin et d'environnement. Même en l'exécutant comme bash virtualenv_blah.sh
ne fonctionnera pas car cela créera simplement l'environnement à l'intérieur du sous-shell.
Essayez . virtualenv_activate.sh
ou source virtualenv_activate.sh
cela permet essentiellement au script de s'exécuter dans votre environnement actuel et toutes les variables d'environnement modifiées par l'activation de virtualenv seront disponibles.
HTH.
Edit: Voici un lien qui pourrait aider - http://ss64.com/bash/period.html
Sur Mac OS X, vos propositions ne semblent pas fonctionner.
Je l'ai fait de cette façon. Je ne suis pas très satisfait de la solution, mais partagez-la quand même ici et j'espère que quelqu'un suggérera peut-être la meilleure:
Dans activate.sh
J'ai
echo 'source /Users/andi/.virtualenvs/data_science/bin/activate'
J'accorde des autorisations d'exécution par: chmod +x activate.sh
Et j'exécute de cette façon:
`./activate.sh`
Notez qu'il y a des parenthèses sous forme de ASCII code 96 = `(accent grave)
Dans mon cas, Ubuntu 16.04, les méthodes ci-dessus n'ont pas bien fonctionné ou nécessitent beaucoup de travaux.
Je viens de créer un lien vers le fichier de script "activer" et de le copier dans le dossier personnel (ou dans le dossier accessible par $ PATH) et de le renommer en un simple comme "actai".
Ensuite, dans un terminal, appelez simplement "source actai". Ça a marché!