2016-07-13 1 views
0

Я хочу попасть в виртуальную среду в файлах python. Но это не создает таких файлов.subprocess open ('source venv/bin/activate'), нет такого файла?

import subprocess 
subprocess.Popen(['source', '/Users/XX/Desktop/mio/worker/venv/bin/activate']) 

Traceback (most recent call last): File "/Users/Ru/Desktop/mio/worker/run.py", line 3, in subprocess.Popen(['source', '/Users/Ru/Desktop/mio/worker/venv/bin/activate'])

File"/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 710, in init errread, errwrite)

File"/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1335, in _execute_child raise child_exception

OSError: [Errno 2] No such file or directory

ответ

1

Я думаю, что ваш код не работает, потому что вы отделяете команду «источник» из аргумента virtualenv пути, из documentation:

"Note in particular that options (such as -input) and arguments (such as eggs.txt) that are separated by whitespace in the shell go in separate list elements, while arguments that need quoting or backslash escaping when used in the shell (such as filenames containing spaces or the echo command shown above) are single list elements."

Вы должны попробовать один из двух вещи: Сначала напишите путь к файлу источника и виртуального файла в виде однострочного аргумента:

import subprocess 
subprocess.Popen(['source '/Users/XX/Desktop/mio/worker/venv/bin/activate']) 

Я работаю над OSX, и это, похоже, не работает, но может быть из-за оболочки, которую вы используете. Для того, чтобы обеспечить это будет работать, вы можете использовать оболочку = True флаг:

import subprocess 
subprocess.Popen(['source '/Users/XX/Desktop/mio/worker/venv/bin/activate'],shell=True) 

это будет использовать/bin/ш оболочки по умолчанию. Опять же, вы можете прочитать больше в документации.

Tom.

+0

Кажется, что он работает, но я все еще не могу импортировать свою moudle в venv. – panda0

+0

'Traceback (последний последний звонок): Файл« /Users/XX/Desktop/mio/worker/run.py », строка 3, в import pika' – panda0

+0

Пожалуйста, вставьте еще один код, чтобы я мог понять его поток ... BTW Я вижу, что вы пытаетесь импортировать файл с именем pika ... если вы строите игру или интеграцию короля покемонов (TM) с Pokemon, тогда, пожалуйста, получите жизнь и что-то построить else (просто шучу, я просто не могу относиться к этой игре: P). – Tom

1

Существует еще один простой способ сделать то, что вы хотите. Если вы хотите, чтобы скрипт python использовал virtualenv, вы всегда можете использовать интерпретатор python из самого virualenv.

/Users/Ru/Desktop/Мио/Рабочий/venv/bin/питон my_python_file.py

Это будет работать my_python_file.py со свойствами/библиотек virtualenv.

Если вы хотите запустить этот файл внутри подпроцесса вы можете сделать что-то подобное методу я описал выше:

import subprocess 
subprocess.Popen(['/Users/Ru/Desktop/mio/worker/venv/bin/python my_python_file.py]) 

и имеют my_python_file.py импорта Pika и выполнять другие действия, которые вы хотите сделать.

Tom.

 Смежные вопросы

  • Нет связанных вопросов^_^