3

1つ(または複数)の大きなPythonライブラリを共有する多数の小さなスクリプトで構成されるプロジェクトを編成および開発するための最良の方法は何ですか?

リポジトリには、同じリポジトリに保存されている同じライブラリを使用するプログラムがたくさんあります。つまり、次のようなレイアウト

trunk
    libs
        python
        utilities
    projects
        projA
        projB

プログラムの公式実行が完了したら、使用されたコードのバージョンを記録します。C ++実行可能ファイルの場合、コンパイル時に作業コピーがクリーンである限り、すべてが正常であるため、処理は単純です。(そして、プログラムでバージョン番号を取得するので、エクスポートではなく、作業コピーである必要があります。)Pythonスクリプトの場合、状況はより複雑になります。

問題は、多くの場合、1つのプロジェクト(projAなど)が実行され、projBを更新する必要があることです。これにより、実行時に作業コピーのリビジョンがprojAに混在して表示される可能性があります。(コードの実行には数時間かかり、実行に数日かかるプロセスの入力として使用できるため、強力なトレーサビリティの目標があります。)

私の現在の回避策は、必要に応じて、トランクの別のコピーを別の場所にチェックアウトし、そこで実行することです。ただし、最初のツリーではなく、lib/pythonの2番目のバージョンを指すようにPYTHONPATHを変更することを忘れないでください。

完璧な答えはないでしょう。しかし、もっと良い方法があるはずです。

データユーザーがファイルをエクスポートできるようにするリビジョン番号を保存するためにsubversionキーワードを使用する必要がありますか?virtualenvを使用する必要がありますか?パッケージ化とインストールのメカニズムにもっと取り組むべきですか?Setuptoolsは標準ですが、私はそれについてさまざまなことを読んだことがあり、開発者以外のエンドユーザー向けに設計されているようです(私たちにはありません)。

4

2 に答える 2

2

はるかに優れた解決策は、すべてのプロジェクトとそれらの共有依存関係を同じリポジトリに保存しないことです。

プロジェクトごとに 1 つのリポジトリを使用し、共有ライブラリには外部を使用します。

共有ライブラリ リポジトリのタグを利用して、消費者プロジェクトが外部で必要なバージョンを正確に使用できるようにします。

編集:(私のコメントからこれをコピーするだけです)同じサーバー上のさまざまなアプリに分離されたランタイム環境を提供する必要がある場合は、virtualenvを使用します。次に、各環境に、必要なライブラリの一意のバージョンを含めることができます。

于 2009-11-07T01:04:00.103 に答える
1

あなたの質問を正しく理解しているなら、間違いなく virtualenv が必要です。いくつかの virtualenvwrapper の利点を追加して、より優れたものにします。

于 2009-11-07T01:25:17.050 に答える