1

当社では、現在のデスクトップ アプリケーション開発 (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 アプリの依存関係を追跡するためのベスト プラクティスは何ですか?

4

3 に答える 3

1

virtualenv + pipを使用できます。virtualenvを使用すると、アプリケーション用にカスタマイズされた環境を作成できます。この環境では、すべてのパッケージが、システム全体ではなく、環境内のpip(easy_install置換)を使用してローカルにインストールされます。次に、それらが自動的にインストールされる依存関係のリストを生成できます。

于 2010-09-11T14:48:38.197 に答える
0

私は、もともとTipfy用に書かれたレシピで zc.buildout を使用していますbuildout.cfg

  • zc.buildout をインストールします -pip install zc.buildout

  • buildout.cfg空のプロジェクト ディレクトリに を作成versions.cfgし、例から もコピーします。でGAEバージョンをカスタマイズしますbuildout.cfg

  • 指定されたエラーを実行buildoutして修正します。(基本的には、構造ディレクトリを作成するだけです。)

  • eggsのセクションに依存関係を追加するだけbuildout.cfgで、それらを管理できます。

私にとってはうまくいきます。

于 2012-11-23T19:41:28.240 に答える
0

また、Java プロジェクトで Ivy と Maven を使用して、Python プロジェクトで自動化された依存関係解決を取得する最良の方法を見つけようとしています。

私が知る限り、Python には Maven ほどうまく機能するものはありませんが、zc.buildoutは非常に近いようです。pip/distribute の場合と同じ従来のdistutils setup.py スクリプトを使用しますが、プロジェクトの構築方法に大きな柔軟性を提供します。virtualenv をいじる必要はありませんが、分離されたビルド環境を提供します。

次に、ローカルの Pypi インスタンスをセットアップし、それをすべての Python 依存関係のリポジトリとして使用する必要があります。

依存関係がすべて純粋な Python である場合、これは非常にうまく機能するはずです。ネイティブ コードに依存している場合は、問題が発生する可能性があります。これを可能にするビルドアウト レシピがあり、独自のカスタム レシピを簡単に作成できます。

インターネット経由で依存関係をプルする場合は、各開発者が~/.buildout/default.cfgでdownload-cacheプロパティを設定することが不可欠です。

于 2011-10-18T07:55:16.570 に答える