4

私はDjangoの展開virtualenvwrapperに使用しています。virtualenv以下は私のファブリックタスクです:

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をアクティブにすると、既存の環境で魔法がかかるため、それは機能しないと思いますが、私が知っているように、ファブリックには環境を備えた独自のシェルがありません。次のように試すことができます:

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