首页 文章

子进程打开('source venv/bin/activate'),没有这样的文件?

提问于
浏览
0

我想进入python文件中的虚拟环境 . 但它没有引发这样的文件 .

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

Traceback(最近一次调用最后一次):文件“/Users/Ru/Desktop/mio/worker/run.py”,第3行,在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]没有这样的文件或目录

2 回答

  • 1

    我认为你的代码不是来自documentation来自virtualenv路径参数的't work because you are separating the ' source'命令:

    “特别注意,由shell中的空格分隔的选项(例如-input)和参数(例如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

    还有另一种更简单的方法可以做你想要的 . 如果你想让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导入鼠标并执行您希望执行的其他操作 .

    汤姆 .

相关问题