簡體   English   中英

subprocess.Popen:找不到mkvirtualenv

[英]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變量

問題似乎是由$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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM