[英]subprocess.Popen: mkvirtualenv not found
我在部署中使用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
謝謝你的所有答案。
mkvirtualenv
可能是一個shell函數,它通過從shell的啟動文件中獲取virtualenvwrapper.sh
腳本來添加到您的環境中。 在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函數。 在這種情況下,問題變成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
作為子/home/thore/scripts/mkvirtualenv
的參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.