Невозможно активировать виртуальную среду с помощью сценария оболочки [duplicate]

Этот вопрос уже имеет ответ здесь: Не удается успешно запустить .bashrc из сценария оболочки 5 ответов

Я прочитал похожие вопросы и попробовал свои предложения, но я до сих пор не могу активировать свою виртуальную среду. Иерархия каталогов:

myproject -- virtualenv -- startvenv.sh

startvenv.sh is:

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

И я запускаю startvenv.sh by:

./startvenv.sh

Нет ошибки, но ничего не происходит. Зачем? В идеале я хочу открыть новый терминал и активировать свою виртуальную среду там.

4
задан 16 October 2017 в 19:19

3 ответа

virtualenv активируется путем поиска (не работает) скрипта virtualenv/bin/activate. Если вы хотите сделать это в своем собственном скрипте, вы должны также запустить этот сценарий, а не просто запустить его. Значение:

source startvenv.sh

. Разница между запуском и поиском заключается в том, что запуск выполняется скриптом в отдельной отдельной подоболочке, которая изолирована от родительской оболочки (той, из которой вы ее назвали), чтобы, например, переменные среды и другие изменения внутри скрипта не распространяются на родителя.

Sourcing явно делает именно это, выполняя скрипт в вашей текущей оболочке, который оставляет все изменения в переменных среды и т. д. неповрежденными после завершения.

Вот короткое извлечение из man bash (раздел о оболочке):

    .  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.  [ ... ]
4
ответ дан 22 May 2018 в 17:30
  • 1
    Это сработало. Я добавил команду, которую использовал. Благодаря! – Heuyie 17 October 2017 в 02:43

virtualenv активируется путем поиска (не работает) скрипта virtualenv/bin/activate. Если вы хотите сделать это в своем собственном скрипте, вы должны также запустить этот сценарий, а не просто запустить его. Значение:

source startvenv.sh

. Разница между запуском и поиском заключается в том, что запуск выполняется скриптом в отдельной отдельной подоболочке, которая изолирована от родительской оболочки (той, из которой вы ее назвали), чтобы, например, переменные среды и другие изменения внутри скрипта не распространяются на родителя.

Sourcing явно делает именно это, выполняя скрипт в вашей текущей оболочке, который оставляет все изменения в переменных среды и т. д. неповрежденными после завершения.

Вот короткое извлечение из man bash (раздел о оболочке):

. 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. [ ... ]
4
ответ дан 18 July 2018 в 05:12

virtualenv активируется путем поиска (не работает) скрипта virtualenv/bin/activate. Если вы хотите сделать это в своем собственном скрипте, вы должны также запустить этот сценарий, а не просто запустить его. Значение:

source startvenv.sh

. Разница между запуском и поиском заключается в том, что запуск выполняется скриптом в отдельной отдельной подоболочке, которая изолирована от родительской оболочки (той, из которой вы ее назвали), чтобы, например, переменные среды и другие изменения внутри скрипта не распространяются на родителя.

Sourcing явно делает именно это, выполняя скрипт в вашей текущей оболочке, который оставляет все изменения в переменных среды и т. д. неповрежденными после завершения.

Вот короткое извлечение из man bash (раздел о оболочке):

. 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. [ ... ]
4
ответ дан 24 July 2018 в 18:16

Другие вопросы по тегам:

Похожие вопросы: