флеш-приложение для запуска интерфейса фляжки в virtualenv [duplicate]

Имейте в виду, что независимо от сценария причина всегда одинакова в .NET:

Вы пытаетесь использовать ссылочную переменную, значение которой Nothing / null. Если для ссылочной переменной значение Nothing / null, это означает, что на самом деле оно не содержит ссылку на экземпляр любого объекта, который существует в куче.

Вы либо никогда не присваивали какую-либо переменную, никогда не создавали экземпляр значения, присвоенного переменной, или вы вручную устанавливали переменную, равную Nothing / null, или вы вызывали функцию, которая установите для этой переменной значение Nothing / null.

64
задан h3. 4 August 2011 в 15:27
поделиться

6 ответов

Простое решение, которое работает для меня. Я не знаю, зачем вам нужен скрипт 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 или выйдите. Это возможное решение или не то, что вы хотели?

4
ответ дан Depado 26 August 2018 в 03:10
поделиться

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

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

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

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

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

Целый трюк лежит внутри аргумента -rcfile.

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

Win!

17
ответ дан h3. 26 August 2018 в 03:10
поделиться

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

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

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

chmod u+x script.py

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

./script.py

Voila!

14
ответ дан Jimothy 26 August 2018 в 03:10
поделиться

Если вы хотите запустить подпроцесс 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))
61
ответ дан Lie Ryan 26 August 2018 в 03:10
поделиться

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

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

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

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

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

> \path\to\env\Scripts\python.exe myscript.py
1
ответ дан Mariano Ruiz 26 August 2018 в 03:10
поделиться

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

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

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

2
ответ дан Mikko Ohtamaa 26 August 2018 в 03:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: