我无法在Fabric中使用virtualenvwrapper切换virtualenv

时间:2012-06-21 11:15:22

标签: python django virtualenv fabric virtualenvwrapper

我正在使用virtualenvwrappervirtualenv用于我的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内工作。

我做错了什么?

3 个答案:

答案 0 :(得分:8)

找出问题所在:

For Fabric:

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

答案 1 :(得分:0)

我认为那不行,因为你活跃了virtualenv它对你现有的环境做了一些魔术,但我知道面料没有自己的环境外壳。你可以尝试这样:

 run('/home/your_folder/virtualenv/bin/pip install -r %s' % req_file)

答案 2 :(得分:0)

如果您不想使用.bashrc,那么这里的解决方案将与最新的Fabric(1.10)+ virtualenvwrapper(1.11.4)一起使用:

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')