web-dev-qa-db-fra.com

Impossible d'activer l'environnement virtuel avec un script Shell

J'ai lu des questions similaires et essayé leurs suggestions, mais je ne parviens toujours pas à activer mon environnement virtuel. La hiérarchie des répertoires est la suivante:

myproject
-- virtualenv
-- startvenv.sh

startvenv.sh est:

#!/bin/bash
source virtualenv/bin/activate

Et je lance startvenv.sh par:

./startvenv.sh

Aucune erreur, mais rien ne se passe. Pourquoi? Idéalement, je veux ouvrir un nouveau terminal et y activer mon environnement virtuel.

5
Heuyie

Virtualenv s'active par sourcing (ne s'exécute pas normalement) avec le script virtualenv/bin/activate. Si vous voulez faire cela dans votre propre script, alors vous devez source aussi ce script et pas seulement le lancer. Sens:

source startvenv.sh

La différence entre l'exécution et le sourçage réside dans le fait que l'exécution exécute le script dans son propre sous-shell distinct, qui est isolé du shell parent (celui depuis lequel vous l'avez appelé), de sorte que, par exemple, les variables d'environnement et autres modifications à l'intérieur du script ne sont pas propagées au parent.

C'est exactement ce que fait le sourcing, en exécutant le script dans votre shell actuel , qui laisse toutes les modifications apportées aux variables d'environnement, etc.

Voici un extrait abrégé de man bash (section sur les Built-in Shell):

    .  filename [arguments]
   source filename [arguments]
          Read and execute commands from filename  in  the  current  Shell
          environment  and return the exit status of the last command exe‐
          cuted from filename.  [ ... ]
5
Byte Commander