Активация virtualenv из скрипта Python - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь активировать мой virtualenv (уже существующий), используя следующий код Python:

Test.py

import os, sys
filename = "activate"
exec(compile(open(filename, "rb").read(), filename, 'exec'), globals, locals)
print(os.system('pwd'))

if hasattr(sys, 'real_prefix'):
    print('success')
else:
    print('failed')

Затем я запускаю этот скрипт с помощьютерминал:

python Test.py

, который затем выдает эту ошибку:

Traceback (most recent call last): File "activate_this.py", line 3, in <module> exec(compile(open(filename, "rb").read(), filename, 'exec'), globals, locals) File "activate", line 4 deactivate () { ^ SyntaxError: invalid syntax


Я могу успешно активировать virtualenv, выполнивcd env/bin, а затем source activate


TLDR

Активация virtualenv из скрипта python вызывает синтаксическую ошибку из файла активации.

1 Ответ

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

Сама строка 1 st активирует (обратите внимание, что VEnv установлена ​​на Win , но это не должно бытьпроблема):

# This file must be used with "source bin/activate" *from bash* 

Это, и строки ниже должны сказать вам, что активировать является ( Борн ) оболочка file.

[Python 3]: compile ( источник, имя файла, режим, флаги = 0, dont_inherit = False, оптимизировать = -1 ) , с другой стороны, работает с Python исходным кодом.

Итак, чтобы выполнить файл, вам нужно использовать другоеспособы, например [Python 3]: подпроцесс - управление подпроцессом .
Вы можете проверить, как я это использовал: [SO]: Как эффективно преобразовать путь POSIX в путь Windows с Python в Cygwin?(@ Ответ CristiFati) .

Но, Я действительно не вижу смысла делать все это , вы, вероятно, неправильно поняли предложение вашего коллеги.
Также обратите внимание, что даже если вам удастся сделать это таким образом, все переменные окружения будут установлены только в вызывающем процессе , так что это будет в значительной степени непригодно для использования (ну, если вы не выполните такжеваш скрипт оттуда тоже).

Вы должны пойти по рекомендуемому пути ( [PyPA]: Virtualenv - Руководство пользователя ), и это (от bash ):

source /path/to/Django/ENV/bin/activate
python your_project_startup_script.py  # (as I recall, it's manage.py)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...