Я хочу активировать экземпляр virtualenv из скрипта Python.
Я знаю, что это довольно просто сделать, но во всех примерах, которые я видел, он используется для запуска команд в env и последующего закрытия подпроцесса.
Я просто хочу активировать virtualenv и вернуться в оболочку, так же, как это делает bin / activate.
Что-то вроде этого:
$me: my-script.py -d env-name
$(env-name)me:
Это возможно?
Соответствующие:
python
virtualenv
h3.
источник
источник
subprocess.Popen([venv_python_file, script_file])
:?script_file
из произвольного места или он должен находиться вvirtualenv
каталоге?script_file
необходимости находиться в каталоге virtualenv, он может быть где угодно.Самым простым решением для запуска вашего скрипта под интерпретатором virtualenv является замена строки shebang по умолчанию на путь к вашему интерпретатору virtualenv, как в начале скрипта:
#!/path/to/project/venv/bin/python
Сделайте скрипт исполняемым:
Запускаем скрипт:
Вуаля!
источник
Оказывается, да, проблема не из простых, но решение есть.
Сначала мне пришлось создать сценарий оболочки, чтобы обернуть команду «source». Тем не менее, я использовал "." вместо этого, потому что я читал, что лучше использовать его, чем исходный код для сценариев Bash.
#!/bin/bash . /path/to/env/bin/activate
Затем из моего скрипта Python я могу просто сделать это:
import os os.system('/bin/bash --rcfile /path/to/myscript.sh')
Вся уловка заключается в
--rcfile
аргументе.Когда интерпретатор Python завершает свою работу, он оставляет текущую оболочку в активированной среде.
Выиграть!
источник
os.system('/bin/bash --rcfile path/to/env/activate')
вы знаете, когда экземпляр bash запускается, он принимает .bashrc в качестве аргумента для --rcfile. Так что просто укажите, что rcfile - ваш файл активации ... Нет?cat ~/.bashrc env/bin/activate > env/bin/activate2 && /bin/bash --rcfile env/bin/activate2
Чтобы запустить другую среду Python в соответствии с официальной документацией Virtualenv , в командной строке вы можете указать полный путь к исполняемому двоичному файлу Python, просто (нет необходимости активировать virtualenv раньше):
То же самое применимо, если вы хотите вызвать сценарий из командной строки с помощью вашего virtualenv. Вам не нужно активировать его раньше:
То же самое для среды Windows (будь то из командной строки или из скрипта):
источник
Просто простое решение, которое мне подходит. Я не знаю, зачем вам нужен сценарий Bash, который в основном делает бесполезный шаг (я ошибаюсь?)
import os os.system('/bin/bash --rcfile flask/bin/activate')
Что в основном делает то, что вам нужно:
[hellsing@silence Foundation]$ python2.7 pythonvenv.py (flask)[hellsing@silence Foundation]$
Затем вместо деактивации виртуальной среды просто Ctrl+ Dили выйдите. Это возможное решение или не то, что вы хотели?
источник
Среда дочернего процесса теряется в тот момент, когда она перестает существовать, и перемещение содержимого среды оттуда к родительскому довольно сложно.
Вероятно, вам нужно создать сценарий оболочки (вы можете создать его динамически в / tmp), который будет выводить переменные среды virtualenv в файл, который вы затем читаете в родительском процессе Python и помещаете в os.environ.
Или вы просто анализируете скрипт активации, используя его для строки в open («bin / activate»), извлекаете данные вручную и помещаете в os.environ. Это сложно, но возможно.
источник
Верхний ответ работает только для Python 2.x
Для Python 3.x используйте это:
activate_this_file = "/path/to/virtualenv/bin/activate_this.py" exec(compile(open(activate_this_file, "rb").read(), activate_this_file, 'exec'), dict(__file__=activate_this_file))
Ссылка: Какая альтернатива execfile в Python 3?
источник
Вы должны создать все свои
virtualenv
файлы в одной папке, напримерvirt
.Предполагая, что ваше имя папки virtualenv - virt, если не изменить его
Скопируйте следующие строки ...
#!/usr/bin/env bash ENV_PATH="$HOME/virt/$1/bin/activate" bash --rcfile $ENV_PATH -i
Создайте файл сценария оболочки и вставьте приведенные выше строки ...
Предоставьте исполняемое разрешение вашему файлу:
Теперь экспортируйте этот настраиваемый путь к папке, чтобы вы могли найти его в командной строке, щелкнув вкладку ...
экспорт PATH = $ PATH: "$ HOME / custom"
Теперь вы можете использовать его откуда угодно, просто набрав команду ниже ...
Предположим, это abc, тогда ...
источник