4

virtualenvwrapper用于virtualenv我的 Django 部署。以下是我的 Fabric 任务:

proj_path = '/path/to/proj'

def setup_code():
    sudo('pip install virtualenvwrapper')
    run('export WORKON_HOME=$HOME/.virtualenvs')
    run('source /usr/local/bin/virtualenvwrapper.sh && mkvirtualenv myenv')
    run('source /usr/local/bin/virtualenvwrapper.sh && workon myenv')
    cd(proj_path)
    req_file = os.path.join(proj_path, 'requirements.txt')
    run('pip install -r %s' % req_file)

我执行了上述fab任务,但它的行为很奇怪。pip开始检索所有包,然后开始为它们执行安装文件。在执行setup文件时它崩溃说Permission denied.

但为什么?它在内部~virtualenv.

我究竟做错了什么?

4

3 回答 3

8

找出问题所在:

面料:

cd('dir') # doesn't works.

以下作品:

with cd('dir'):
    print('pwd') # Directory change reflects here.

同样,其他环境问题,例如:

run('export WORKON_HOME=$HOME/.virtualenvs')
run('source /usr/local/bin/virtualenvwrapper.sh && mkvirtualenv myenv')
run('source /usr/local/bin/virtualenvwrapper.sh && workon myenv')

但改为:

with prefix('WORKON_HOME=$HOME/.virtualenvs'):
    with prefix('source /usr/local/bin/virtualenvwrapper.sh'):
        with prefix('workon myenv'): # Assuming there is a env called `myenv`
            run('pip install -r requirements.txt') # Works in virtualenv

从官方文档中弄清楚:http: //docs.fabfile.org/en/stable/api/core/context_managers.html

于 2012-06-22T05:41:40.027 回答
0

我认为那是行不通的,因为那时您激活了 virtualenv,它对您现有的环境有一些魔力,但据我所知,fabric 没有自己的外壳和环境。你可以这样尝试:

 run('/home/your_folder/virtualenv/bin/pip install -r %s' % req_file)
于 2012-06-21T12:01:38.140 回答
0

如果您不想使用您.bashrc的 .

with shell_env(WORKON_HOME=run('printf $HOME/.virtualenvs'),
        prefix('source /usr/share/virtualenvwrapper/virtualenvwrapper.sh'):

    run('mkvirtualenv foo')    
    with prefix('workon foo'):
        run('which python')
于 2015-12-21T22:24:02.820 回答