【问题标题】:subprocess open ('source venv/bin/activate'),no such file?子进程打开('source venv/bin/activate'),没有这样的文件?
【发布时间】:2016-11-16 00:19:08
【问题描述】:

我想在 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 读错,写错)

文件“/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] 没有这样的文件或目录

【问题讨论】:

    标签: python subprocess virtualenv


    【解决方案1】:

    我认为您的代码不起作用,因为您将“源”命令与 virtualenv 路径参数、documentation 分开:

    "请特别注意选项(例如 -input)和参数(例如 作为 Eggs.txt) 在 shell 中由空格分隔的进入 单独的列表元素,需要引用的参数或 在 shell 中使用时反斜杠转义(例如文件名 包含空格或上面显示的 echo 命令)是单个列表 元素。"

    您应该尝试以下两种方法之一: 首先,将源和 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。同样,您可以在文档中阅读更多内容。

    汤姆。

    【讨论】:

    • 看来它可以工作,但我仍然无法在 venv 中导入我的 moudle。
    • Traceback (most recent call last): File "/Users/XX/Desktop/mio/worker/run.py", line 3, in <module> import pika
    • 请粘贴更多代码,以便我了解其流程...顺便说一句,我可以看到您正在尝试导入一个名为 pika 的文件...如果您正在构建一些口袋妖怪之王(TM) 游戏/与 Pokemon go 的集成然后请获得生活并构建其他东西(开玩笑,我就是无法与那个游戏联系起来:P)。
    • import subprocess subprocess.Popen(['source /Users/Ru/Desktop/mio/worker/venv/bin/activate'],shell=True)
    • 然后import pika
    【解决方案2】:

    还有另一种更简单的方法来做你想做的事。 如果你想让 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 导入 pika 并执行您希望执行的其他操作。

    汤姆。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-10
      • 2020-10-09
      • 1970-01-01
      • 1970-01-01
      • 2018-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多