Python 未找到subprocess.Popen:mkvirtualenv
我正在部署中使用VirtualVWrapper。为了设置新的环境,我正在运行一个python脚本,其中包含所有需要的步骤 设置脚本包括:Python 未找到subprocess.Popen:mkvirtualenv,python,virtualenvwrapper,Python,Virtualenvwrapper,我正在部署中使用VirtualVWrapper。为了设置新的环境,我正在运行一个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().spli
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脚本中正确使用VirtualNVRapper
编辑:
以下代码适用于我:
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
感谢您的所有回答。编辑:
我了解到,mkvirtualenv
是一个shell函数。在这种情况下,问题变成了如何在python中运行shell函数。我下面的答案可以应用于独立二进制文件。对于您的问题,请看答案:您可以从定义mkvirtualenv()函数的脚本中间接调用它
正确设置路径变量
问题似乎是由$PATH
变量引起的。您需要正确设置此变量,以便可以找到mkvirtualenv
可执行文件。例如,如果在`/home/thore/scripts中有mkvirtualenv
可执行文件,则需要在.bashrc或.zshrc中设置$PATH(取决于shell),如下所示:
export PATH=$PATH:/home/thore/scripts
这样,mkvirtualenv
脚本将被正确找到并运行
另一个解决方案
该问题的另一个解决方案是使用所讨论脚本的精确路径。在这种情况下,您可以将
/home/thore/scripts/mkvirtualenv
作为子流程的参数。mkvirtualenv
可能是通过源代码添加到环境中的shell函数。在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)
mkvirtualenv
不是脚本。这是一个shell函数。啊,那么问题就变成了如何在python脚本中运行bash函数。更新注释。值得注意的是,您的源代码行将在除您自己的计算机之外的大多数计算机上中断。如果你想让它在其他人的机器上运行,请告诉我,我可以为你编写一些bash,但如果你只想在本地机器上运行,那就好了。整个安装脚本是为特殊的服务器布局编写的,因此对我来说,目前不需要通用解决方案。