2012-12-27 73 views
2

我正在使用fabric來使用virtualenv部署應用程序。我上週使用fabric 1.4並升級到1.5.1。我的腳本停止工作。無法在使用Fabric的遠程使用Virtualenv中的pip安裝軟件包

它無法安裝要求。它似乎沒有激活virtualenv。在我的代碼,我有:

with cd('%(path)s' % env): 
     with prefix('source bin/activate'): 
      run('pip install -U distribute') 

我得到一個權限被拒絕的錯誤:error: could not delete '/usr/local/lib/python2.7/dist-packages/pkg_resources.py': Permission denied

正在執行的命令是:

Executed: /bin/bash -l -c "cd /var/www/myproject && source bin/activate && export PATH=\"\\$PATH:\\"/var/www/myproject\\" \" && pip install -U distribute" 

如果我ssh到遠程計算機並運行cd /var/www/myproject && source bin/activate && pip install -U distribute,它工作得很好。

爲什麼我的結構腳本不工作?

在此先感謝

+0

我有輕微的懷疑,其面料實例化的virtualenv在目標主機上可能有不需要的結果。 – favoretti

+0

根據這個鏈接,這是可能的,但我不明白我做錯了什麼。 http://stackoverflow.com/questions/1180411/activate-a-virtualenv-via-fabric-as-deploy-user – duduklein

+0

那麼,唯一的區別是,你使用'run()',而不是'sudo( )',這可能是一個權限問題。嘗試使用'sudo()'? – favoretti

回答

5

,而不是與..串行方式

source bin/activate 
pip install -U distribute 

..directly使用的virtualenv的PIP可執行文件:

myenv/bin/pip install -U distribute 
+0

我最終這樣做 – duduklein

+0

適合我... – benjaminz

3

雖然不完全是一個解決方案,fabtools有一些是非常方便的與virtualenvs功能。他們爲你做了(幾乎)所有的辛苦工作,並且可能值得用來檢查它是否沒有其他問題。

# Cut (and modified) from the fabtools documentation 
from fabric.api import * 
from fabtools import require 
import fabtools 

@task 
def setup(): 
    # Require a Python package 
    with fabtools.python.virtualenv('/home/myuser/env'): 
     require.python.package('pyramid') 
相關問題