Подтвердить что ты не робот

Активируйте virtualenv с помощью python script

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

Я знаю, что это довольно легко сделать, но все примеры, которые я видел, используют для запуска команд в 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

4b9b3361

Ответ 1

Если вы хотите запустить подпроцесс Python под virtualenv, вы можете сделать это, запустив script с помощью интерпретатора 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 script:

# 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))

Ответ 2

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

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

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

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

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

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

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

Win!

Ответ 3

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

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

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

chmod u+x script.py

Запустите script:

./script.py

Voila!

Ответ 4

Чтобы запустить другую среду Python в соответствии с официальной документацией Virtualenv, в командной строке вы можете указать полный путь к исполняемому двоичному файлу Python, только это (нет необходимости активировать virtualenv раньше):

/path/to/virtualenv/bin/python

То же самое применимо, если вы хотите вызвать скрипт из командной строки с помощью вашего virtualenv, вам не нужно активировать его раньше:

me$ /path/to/virtualenv/bin/python myscript.py

То же самое для среды Windows (будь то из командной строки или из скрипта):

> \path\to\env\Scripts\python.exe myscript.py

Ответ 5

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

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

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

[[email protected] Foundation]$ python2.7 pythonvenv.py 
(flask)[[email protected] Foundation]$ 

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

Ответ 6

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

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

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

Ответ 7

Вы должны создать все ваши virtualenv в одной папке, например, virt.

Предполагая, что ваше имя папки virtualenv является virt, если не измените его

cd mkdir custom

скопировать ниже строки...

#!/usr/bin/env bash ENV_PATH="$HOME/virt/$1/bin/activate" bash --rcfile $ENV_PATH -i

создайте файл сценария оболочки и вставьте строки выше. , ,

touch custom/vhelper nano custom/vhelper

предоставить исполняемый файл разрешений для вашего файла

sudo chmod +x custom/vhelper

экспортируйте этот путь к папке, чтобы найти его в командной строке, нажав вкладку...

export PATH=$PATH:"$HOME/custom"

Теперь вы можете использовать его из любого места, просто набрав команду ниже...

vhelper YOUR_VIRTUAL_ENV_FOLDER_NAME

Предположим, что это abc тогда...

vhelper abc