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

问题描述 投票:3回答:3

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

我究竟做错了什么?

python django virtualenv fabric virtualenvwrapper
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


0
投票

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

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

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')
© www.soinside.com 2019 - 2024. All rights reserved.