簡體   English   中英

我無法在Fabric中使用virtualenvwrapper切換virtualenv

[英]I am unable to switch virtualenv with virtualenvwrapper in Fabric

我使用virtualenvwrapper使用virtualenv我的Django deployement。 以下是我的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里面工作。

我究竟做錯了什么?

弄清楚問題:

對於面料:

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

我認為那不行,因為你活躍了virtualenv它對你現有的環境做了一些魔術,但我知道面料沒有自己的環境外殼。 你可以嘗試這樣:

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

如果您不想使用.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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM