Активируйте 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
Ответы
Ответ 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