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.
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. [ ... ]