Активировать virtualenv с помощью скрипта python

Я хочу активировать экземпляр virtualenv из сценария python.

Я знаю, что это довольно легко сделать, но все примеры, которые я видел, используют для запуска команд в env, а затем закрывают подпроцесс.

Я хочу просто активировать virtualenv и вернуться в оболочку, так же, как bin / activate.

Что-то вроде этого:

$me: my-script.py -d env-name $(env-name)me: 

Это возможно ?

Соответствующий:

http://groups.google.com/group/python-virtualenv/browse_thread/thread/15f8a9b0506abeae

6 Solutions collect form web for “Активировать virtualenv с помощью скрипта python”

Если вы хотите запустить подпроцесс Python под virtualenv, вы можете сделать это, запустив скрипт с помощью интерпретатора python, который живет в каталоге virtualenv / bin /:

 # path to a python interpreter that runs any python script # under the virtualenv /path/to/virtualenv/ python_bin = "/path/to/virtualenv/bin/python" # path to the script that must run under the virtualenv script_file = "must/run/under/virtualenv/script.py" subprocess.Popen([python_bin, script_file]) 

Однако, если вы хотите активировать virtualenv под текущим интерпретатором python вместо подпроцесса, вы можете использовать скрипт activate_this.py :

 # doing execfile() on this file will alter the current interpreter's # environment so you can import libraries in the virtualenv activate_this_file = "/path/to/virtualenv/bin/activate_this.py" execfile(activate_this_file, dict(__file__=activate_this_file)) 

Оказывается, да, проблема не проста, но решение есть.

Сначала мне пришлось создать сценарий оболочки, чтобы обернуть команду «source». Тем не менее я использовал «.». вместо этого, потому что я читал, что лучше использовать его, чем источник для сценариев bash.

 #!/bin/bash . /path/to/env/bin/activate 

Тогда из моего скрипта python я могу просто сделать это:

 import os os.system('/bin/bash --rcfile /path/to/myscript.sh') 

Весь трюк лежит в аргументе -rcfile.

Когда интерпретатор python завершает работу, вы покидаете текущую оболочку в активированной среде.

Выиграть !

Простейшим решением для запуска скрипта под интерпретатором virtualenv является замена по умолчанию строки shebang на путь к интерпретатору virtualenv, как это происходит в начале скрипта:

 #!/path/to/project/venv/bin/python 

Сделайте исполняемый файл сценария:

 chmod u+x script.py 

Запустите скрипт:

 ./script.py 

Вуаля!

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

 import os os.system('/bin/bash --rcfile flask/bin/activate') 

Что в основном делает то, что вам нужно:

 [hellsing@silence Foundation]$ python2.7 pythonvenv.py (flask)[hellsing@silence Foundation]$ 

Затем вместо деактивации venv, просто Ctrl + D или выйдите.
Это возможное решение или не то, что вы хотели?

Детский процесс env теряется в тот момент, когда он прекращает свое существование, и перемещение содержимого окружающей среды оттуда родителям несколько сложно.

То, что вам, вероятно, нужно сделать, – это создать сценарий оболочки (вы можете генерировать динамически в / tmp), который будет выводить переменные среды virtualenv в файл, который затем читается в родительском процессе Python и помещается в os.environ.

Или вы просто анализируете активацию скрипта при использовании для открытой строки («bin / activate») и вручную извлекаете материал и помещаете в os.environ. Трудно, но не невозможно.

Итак, чтобы запустить другую среду Python в соответствии с официальной документацией Virtualenv , в командной строке вы можете указать полный путь к исполняемому двоичному файлу python:

 me$ /path/to/virtualenv/bin/python >>> 

Вы можете сделать это также в среде Windows:

 > \path\to\env\Scripts\python.exe >>> 
  • Есть ли хороший учебник об использовании buildout и pip?
  • venv Python использует неверный sys.prefix
  • Python ImportError: невозможно импортировать имя «_imagingtk» в virtualenv
  • как повторно использовать глобальные пакеты сайтов в conda env
  • Отмените опцию `--no-site-packages` с virtualenv
  • virtualenv python сломался после обновления ubuntu с 15.10 по 16.04
  • Как установить python-devel при использовании virtualenv
  • Настройка виртуальной среды в PyCharm
  • Python - лучший язык программирования в мире.