【问题标题】:subprocess.Popen: mkvirtualenv not foundsubprocess.Popen:未找到 mkvirtualenv
【发布时间】:2013-08-22 15:57:00
【问题描述】:

我在部署中使用 virtualenvwrapper。为了设置新环境,我正在运行一个 python 脚本,其中包含所有需要的步骤。

安装脚本包括:

cmd = 'mkvirtualenv %s --no-site-packages'%('testname')
head = subprocess.Popen(cmd,shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in head.stdout.read().splitlines():
    print line

输出是:

/bin/sh: mkvirtualenv: not found

如何在我的 python 脚本中正确使用 virtualenvwrapper?

编辑:

以下代码适用于我:

cmd = 'source /usr/local/bin/virtualenvwrapper.sh && mkvirtualenv %s --no-site-packages'%('testname')
head = subprocess.Popen(cmd, executable='bash', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in head.stdout.read().splitlines():
    print line

感谢所有回答。

【问题讨论】:

  • 值得注意的是,您的源代码行会在您自己以外的大多数机器上中断。如果您想让它在其他人的机器上工作,请告诉我,我可以为您编写一些 bash,但如果您只想在本地机器上使用它,那很好。
  • 整个设置脚本是为特殊的服务器布局编写的,所以对我来说暂时不需要通用的解决方案。

标签: python virtualenvwrapper


【解决方案1】:

mkvirtualenv 可能是一个外壳函数,它通过采购virtualenvwrapper.sh script from your shell's startup file 添加到您的环境中。在shell=True 上调用的默认命令(例如/bin/sh -c ...)可能不会读取它。

您可以明确地获取文件:

import pipes
from subprocess import check_call

check_call("""source /path/to/virtualenvwrapper.sh &&
    mkvirtualenv --no-site-packages """ + pipes.quote(envname),
    executable='bash', shell=True)

【讨论】:

    【解决方案2】:

    编辑:

    我了解到mkvirtualenv 是一个shell 函数。在这种情况下,问题变为how to run shell function in python。我在下面的回答可以应用于独立的二进制文件。对于您的问题,请查看答案:https://stackoverflow.com/a/5826523/1906700 您可以从定义它的脚本中间接调用 mkvirtualenv() 函数。

    正确设置PATH变量

    问题似乎是由您的$PATH 变量引起的。您需要正确设置此变量,以便可以找到mkvirtualenv 可执行文件。例如,如果您在 `/home/thore/scripts 中有 mkvirtualenv 可执行文件,则需要在 .bashrc 或 .zshrc(取决于您的 shell)中设置 $PATH,如下所示:

     export PATH=$PATH:/home/thore/scripts
    

    这样,mkvirtualenv 脚本将被正确找到并运行。

    另一种解决方案

    该问题的另一个解决方案是使用相关脚本的确切路径。在这种情况下,您可以将/home/thore/scripts/mkvirtualenv 作为参数提供给子进程。

    【讨论】:

    猜你喜欢
    • 2014-11-04
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 2013-11-13
    相关资源
    最近更新 更多