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