我想进入python文件中的虚拟环境。但它没有引发这样的文件。
import subprocess
subprocess.Popen(['source', '/Users/XX/Desktop/mio/worker/venv/bin/activate'])
追踪(最近一次通话): 文件“/Users/Ru/Desktop/mio/worker/run.py”,第3行,in subprocess.Popen(['source','/ Users / Ru / Desktop / mio / worker / venv / bin / activate'])
文件“/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py”,第710行, init errread,errwrite)
文件“/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py”,第1335行,在_execute_child中 提出child_exception
OSError:[Errno 2]没有这样的文件或目录
答案 0 :(得分:1)
我认为您的代码不起作用,因为您将'source'命令与virtualenv路径参数从documentation分开:
“特别注意选项(例如-input)和参数(例如 由shell中的空格分隔的eggs.txt)进入 单独的列表元素,而需要引用的参数或 在shell中使用时反斜杠转义(例如文件名) 包含空格或上面显示的echo命令)是单个列表 元件。强>“
您应该尝试以下两种方法之一: 首先,将source和virtualenv文件路径写为单个字符串参数:
import subprocess
subprocess.Popen(['source '/Users/XX/Desktop/mio/worker/venv/bin/activate'])
我正在研究OSX,但这似乎不起作用,但可能是由于你正在使用的shell。为确保这一点可行,您可以使用shell = True标志:
import subprocess
subprocess.Popen(['source '/Users/XX/Desktop/mio/worker/venv/bin/activate'],shell=True)
默认使用/ bin / sh shell。同样,您可以在文档中阅读更多内容。
汤姆。
答案 1 :(得分:1)
还有另一种更简单的方法可以做你想做的事。 如果你想让python脚本使用virtualenv,你总是可以使用virualenv本身的python解释器。
/ Users / Ru / Desktop / mio / worker / venv / bin / python my_python_file.py
这将使用virtualenv的属性/库运行my_python_file.py。
如果要在子进程中运行该文件,可以执行类似于上述方法的操作:
import subprocess
subprocess.Popen(['/Users/Ru/Desktop/mio/worker/venv/bin/python my_python_file.py])
并让my_python_file.py导入鼠标并执行您希望执行的其他操作。
汤姆。