[英]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.