38

人々が Django プロジェクトを virtualenv と組み合わせてどのように展開しているかに興味があります

  • より具体的には、本番環境の仮想環境を開発マシンと正しく同期させるにはどうすればよいでしょうか?

私は scm に git を使用していますが、git リポジトリ内に自分の virtualenv がありません。ピップ フリーズを使用してから、フリーズ出力を使用してサーバー上に環境を再作成する必要がありますか? (これを行う場合、手順を説明していただけますか-解凍プロセスに関する適切なドキュメントがほとんど見つかりません-pip install -r freeze_output.txt可能性のようなものはありますか?)

4

2 に答える 2

21

pip、Fabric、および git を使用して、このようなものを職場でセットアップしました。フローは基本的に次のようなもので、このスクリプトから大きく借用しています。

  1. ソース ツリーでは、requirements.txt ファイルを維持しています。これを手動で維持します。
  2. 新しいリリースを行うとき、Fabric スクリプトは、渡したツリーに基づいてアーカイブを作成します。
  3. Fabric は、デプロイ対象の SHA を見つけますgit log -1 --format=format:%h TREEISH。それは私たちに与えますSHA_OF_THE_RELEASE
  4. Fabric は、要件ファイルの最後の SHA をgit log -1 --format=format:%h SHA_OF_THE_RELEASE requirements.txt. 1d02afcこれにより、この特定のリリースのそのファイルの SHAなど、短いバージョンのハッシュが吐き出されます。
  5. 次に、Fabric スクリプトは、仮想環境がリモート ホストに保存されているディレクトリを調べます。
    1. という名前のディレクトリがない場合1d02afc、新しい virtualenv が作成され、pip install -E /path/to/venv/1d02afc -r /path/to/requirements.txt
    2. 既存の がある場合path/to/venv/1d02afc何も行われません

これのちょっとした魔法の部分は、git したいツリーっぽいものを渡して、(Fabric から) パッケージ化することです。などを使用することで、リモート マシンgit archive my-branchgit archive 1d02afc適切なパッケージがインストールされることが保証されます。

パッケージがリリース間で変更されていない場合、余分な美徳を浮かび上がらせたくなかったので、私はこのルートに行きました。また、依存している実際のパッケージを自分のソース ツリーに置くという考えも好きではありません。

于 2010-02-11T08:13:02.823 に答える
4

私はこのbootstrap.pyを使用します: http://github.com/ccnmtl/ccnmtldjango/blob/master/ccnmtldjango/template/bootstrap.py

これは、次のような「requirements」と呼ばれるディレクトリであることが期待されます:

apps.txt、libs.txt (apps.txt に含まれています。私は、django アプリを他の Python モジュールから分離したいだけです)、および実際の tarball を含む src ディレクトリがあります。

./bootstrap.py が実行されると、virtualenv が作成され (存在する場合は以前のものが消去されます)、requirements/apps.txt からすべてがインストールされます。それ以外の場合、virtualenv には何もインストールしません。新しいライブラリを含めたい場合は、tarball を requirements/src/ に置き、テキスト ファイルの 1 つに行を追加して、./bootstrap.py を再実行します。

bootstrap.py と要件はバージョン管理にチェックインされます (これも pip.py のコピーであるため、システム全体のどこにでもインストールする必要はありません)。virtualenv 自体はそうではありません。本番環境にプッシュするスクリプトは、プッシュするたびに本番サーバーで ./bootstrap.py を実行します。(bootstrap.py も、Python 2.5 に固執するようにある程度の努力を払っています。これは、実稼働サーバー (Ubuntu Hardy) にあるものであり、私の開発マシン (Ubuntu Karmic) は、注意しないとデフォルトで Python 2.6 になるためです)

于 2010-02-11T02:46:41.790 に答える