virtualenv - запускать скрипты / управление путями - PullRequest
0 голосов
/ 07 января 2019

Проще говоря:
Как я могу гарантировать, что используется мой virtualenv, а не нативный env?

Проблема с другими ответами: Я видел много ответов на этот вопрос, но ответы лаконичны и в основном охватывают сценарий "plug 'n play" виртуальной среды.

Мой сценарий: Предположим, что виртуальная среда Python (myEnv) находится в достаточно сложной папке, а машина, на которой она работает, - достаточно сложная (targetEnv). Предположим, что в virtualenv (myEnv) есть много настроек и что переменная evn в этом virtualenv модифицируется способами, которые мы не можем знать (пример: через файлы .pth).

Обычно ответ, который я вижу, заключается в том, что мы должны сделать что-то подобное в командной строке windows cmd:

cd /d C:\Program Files\MyApp\myEnv\Scripts\ && activate
cd /d C:\Program Files\MyApp\ && python Main.py

Теперь, если вы загляните в activ.batch или Activate.ps1, вы увидите, что все, что они делают, это предполагают, что вы установили переменную PYTHONHOME для своей среды Python, а затем настроили новые переменные env _OLD_VIRTUAL_PATH , _OLD_VIRTUAL_PYTHONHOME, VIRTUAL_ENV и временно удалите переменную PYTHONHOME.

Однако это все еще не говорит оболочке, как найти что-то вроде python.exe. Когда я запускаю это, как в коде, предложенном выше, я получаю среду Python, которая не содержит ни одного из путей sys в оболочке, которые активировались бы при явном вызове: cd / d C: \ Program Files \ MyApp \ myEnv \ Scripts \ && python.exe

Затем в полученной оболочке я вызываю: импорт системы sys.path

Этот тип делает с тех пор, потому что все, что сделал activate, это изменило имя переменных среды, так что все еще совершенно логично, что просто вызов: cd / d C: \ Program Files \ MyApp \ && python Main.py

находит python.exe в _OLD_VIRTUAL_PYTHONHOME (что совпадает с переменной PYTHONHOME) вместо пути VIRTUAL_ENV (что равно C:\Program Files\MyApp\myEnv\). Я предполагаю, что это означает, что модули в пути 'VIRTUAL_ENV' будут обнаружены, но пути, добавленные в виртуальную среду, никогда не будут найдены, поскольку исполняемый файл для оболочки myEnv не вызывается.

Кто-нибудь знает, как с этим справиться?

РЕДАКТИРОВАТЬ 1

Как отмечено в комментариях, мне нужно уточнить. Файл .pth, упомянутый в вопросе, содержит только относительные пути, а не абсолютные. Как и в любой реальной ситуации доставки или развертывания, давайте предположим, что мы не знаем, где установлен этот виртуальный env, и поэтому вынуждены полагаться на использование путей относительно переменных env.

1 Ответ

0 голосов
/ 07 января 2019

Вы пробовали использовать приведенную ниже команду в CMD ??

python -m venv "C:\Program Files\MyApp\myEnv\Scripts\"

Вы можете обратиться к Venv здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...