Не удается активировать виртуальную среду с помощью сценария оболочки
Я прочитал похожие вопросы и попробовал их предложения, но все еще не могу активировать свою виртуальную среду. Иерархия каталогов:
myproject
-- virtualenv
-- startvenv.sh
startvenv.sh это:
#!/bin/bash
source virtualenv/bin/activate
И я запускаю startvenv.sh:
./startvenv.sh
Нет ошибки, но ничего не происходит. Зачем? В идеале я хочу открыть новый терминал и активировать там свою виртуальную среду.
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. [ ... ]