2012-07-05 35 views
1
from fabric.api import sudo, put, run 

def install(): 
    run('source /home/user/.virtualenvs/demo/bin/activate') 
    run('pip install requests') 

if __name__ == '__main__': 
    install() 
# to run this, do fab fabfile 

Q1。 我想在該環境中安裝pip。但是腳本運行後,請求不會安裝在virtualenv中。爲什麼? Q2302。我被要求提供主機信息(以下也是Q1的日誌)。如果我的目標是在當地運行,是否有更好的方法來處理這個問題?編寫織物文件來安裝包裝的新手

No hosts found. Please specify (single) host string for connection: localhost 
[localhost] run: source /home/user/.virtualenvs/demo/bin/activate 
[localhost] Passphrase for private key: 
[localhost] Login password: 
[localhost] run: pip install requests 
[localhost] out: Requirement already satisfied (use --upgrade to upgrade): requests in /usr/local/lib/python2.7/dist-packages 
[localhost] out: Requirement already satisfied (use --upgrade to upgrade): certifi>=0.0.7 in /usr/local/lib/python2.7/dist-packages (from requests) 
[localhost] out: Requirement already satisfied (use --upgrade to upgrade): oauthlib>=0.1.0,<0.2.0 in /usr/local/lib/python2.7/dist-packages (from requests) 
[localhost] out: Requirement already satisfied (use --upgrade to upgrade): chardet>=1.0.0 in /usr/lib/python2.7/dist-packages (from requests) 
[localhost] out: Requirement already satisfied (use --upgrade to upgrade): rsa in /usr/local/lib/python2.7/dist-packages (from oauthlib>=0.1.0,<0.2.0->requests) 
[localhost] out: Requirement already satisfied (use --upgrade to upgrade): pyasn1>=0.0.13 in /usr/local/lib/python2.7/dist-packages (from rsa->oauthlib>=0.1.0,<0.2.0->requests) 
[localhost] out: Cleaning up... 
[localhost] out: 

更新

我可以在一個run命令安裝軟件包。有沒有更好的方法來做到這一點?

謝謝。


這裏是更新的代碼:

from fabric.api import sudo, put, run 
from fabric.context_managers import prefix 

def install(): 
    with prefix('source /home/user/.virtualenvs/demo/bin/activate'): 
     run('pip install requests') 

if __name__ == '__main__': 
    install() 

http://docs.fabfile.org/en/1.2.0/api/core/context_managers.html?highlight=prefix#fabric.context_managers.prefix

回答

2

每個fabric.run命令產卵在其中執行命令的單獨子外殼。

如果您在其中一個運行命令中激活了virtualenv,則該環境不能用於單獨調用run命令的後續命令執行。

參見計算器下面的討論正確的解決方案:contextmanager的

結帳的使用與virtualenv中啓動運行命令。

+0

謝謝,我懂了。查看更新 – user423455 2012-07-05 22:12:47