当社では、現在のデスクトップ アプリケーション開発 (C++/python) のリビジョン管理で外部パッケージの依存関係を追跡するための非常に優れたシステム セットアップがあります。私たちはいくつかの Python のみの Web アプリケーションの開発を開始しており、関連するのは Python コードのみで、easy_install 可能なパッケージからのものである場合のベスト プラクティスの推奨事項を探しています。
デスクトップ アプリの場合、次のようなものがあります。
app_svn_root
- trunk
- src
- doc
- deps -> [svn:external to deps repos with rev num set]
deps_svn_root
- trunk
- setup_env.sh/bat [generated automatically
- dep_project_1 [example: boost, libxml, python, etc]
- vendor_base [svn:external to vendor branch or project repository]
- install_linux_gcc43
- bin
- include
- lib
- install_linux_win32_vc90
- ... [whatever directory structure the project build creates]
チームの開発者がアプリケーションのコードをチェックアウトすると、すべての依存関係が自動的に取得され、コードのそのリビジョンの正しいバージョンが含まれます。[注: 私が省いたいくつかの内部管理スクリプトなどがありますが、これは一般的な考え方です]。これは私たちにとって非常に効果的です。開発者は、正しいバージョンのすべてのパッケージを使用して個人のマシンをセットアップすることを心配する必要はもうありません。一度に複数の開発コピーをチェックアウトできます (例: バージョン 1.0、1.1、2.0 など)。依存関係をパッケージ化し、正しいバージョンの依存関係で単体テストを実行するための継続的統合システム。
現在、Google アプリ エンジン ベースの Python プロジェクトに取り組み始めており、上記のようなものが必要です。開発者が必要なものをすべて一度にチェックアウトできるようにし、全員が同じ依存関係を使用していることを保証したいと考えています。この正確な構造を使用し続けることもできますが、純粋な python プロジェクトには重すぎるようです。
当初、私は次のようなことを考えていました。
- trunk
- gae_apps
- gae_sdk [svn:external to the latest stable GAE code]
- deps
- nose
- nosegae
- pylint
- app1
- templates
- tests
- deps
- webapp2
- console
私が直面している問題は、使用したいすべての python プロジェクト (nose、nosegae など) が、easy_install
それらをダウンロードしてインストールするために使用することを推奨していることです。ただし、これにより、それらがメイン システム ディレクトリにインストールされます。私が本当に望んでいるのは、各パッケージの特定のディレクトリにコードをインストールすることです。(注:depsのすべてのパッケージをsys.pathに正しく追加するコードをmain.pyに入れることを計画していました)。これを行う方法はありますか?それは良い考えですか?
大規模なチームでの開発をサポートするために、純粋な python アプリの依存関係を追跡するためのベスト プラクティスは何ですか?