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