2012-12-27 79 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') 
相关问题