我在部署中使用virtualenvwrapper。为了设置新环境,我正在运行一个包含所有必需步骤的python脚本。
setupscript包括:
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
感谢所有答案。
答案 0 :(得分:5)
mkvirtualenv
可能是一个shell函数,它通过获取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)
答案 1 :(得分:1)
我了解到mkvirtualenv
是一个shell函数。在这种情况下,问题变为how to run shell function in python
。我在下面的答案可以应用于独立的二进制文件。对于您的问题,请查看答案:https://stackoverflow.com/a/5826523/1906700您可以从定义它的脚本中间接调用mkvirtualenv()函数。
问题似乎是由$PATH
变量引起的。您需要正确设置此变量,以便可以找到mkvirtualenv
可执行文件。例如,如果在/ home / thore / scripts中有mkvirtualenv
可执行文件,则需要在.bashrc或.zshrc中设置$ PATH(取决于你的shell),如下所示:
export PATH=$PATH:/home/thore/scripts
通过这种方式,可以正确找到mkvirtualenv
脚本并运行。
问题的另一个解决方案是使用相关脚本的确切路径。在这种情况下,您可以将/home/thore/scripts/mkvirtualenv
作为参数提供给子流程。