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

На этот вопрос уже есть ответ здесь:

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

myproject
-- virtualenv
-- startvenv.sh

startvenv.sh:

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

И я запускаю startvenv.sh с помощью:

./startvenv.sh

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

6
задан 16 October 2017 в 09:19

1 ответ

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

source startvenv.sh

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

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

Вот краткая выдержка из man bash (раздел о Shell Builtins):

    .  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.  [ ... ]
7
ответ дан 23 November 2019 в 07:42

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

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