59

私は、チームの開発ツール スイートの一部として Python を採用することに取り組んでいます。私たちが使用する他の言語/ツールを使用して、私たちが行っている作業に固有の多くの再利用可能な関数とクラスを開発しています。これにより、私たちが物事を行う方法が標準化され、車輪の再発明を大幅に節約できます。

これが通常Pythonでどのように処理されるかの例が見つからないようです。現在、ローカル ドライブに開発フォルダーがあり、その下に複数のプロジェクト フォルダーがあり、追加の「共通」フォルダーには、再利用可能なクラスと関数を含むパッケージとモジュールが含まれています。これらの「共通」モジュールは、複数のプロジェクト内のモジュールによってインポートされます。

Development/
    Common/
        Package_a/
        Package_b/
    Project1/
        Package1_1/
        Package1_2/
    Project2/
        Package2_1/
        Package2_2/

Python アプリケーションを配布する方法を学ぼうとすると、参照されるすべてのパッケージが最上位のプロジェクト フォルダーの下にあり、それに付随するものではないという前提があるようです。おそらく正しいアプローチは、共通/フレームワークモジュールを別のプロジェクトで開発し、テストしたら、サイトパッケージフォルダーにインストールして各開発者の環境に展開することであるという考えも思いつきました。ただし、これは配布に関しても疑問を投げかけます。

誰かがこれに光を当てたり、この問題について議論しているリソースを教えてくれますか?

4

4 に答える 4

17

複数のプロジェクトで共有したい共通のコードがある場合は、このコードを物理的に別のプロジェクトに格納し、依存関係として他のプロジェクトにインポートすることを検討する価値があります。これは、共通コード プロジェクトを github または bitbucket でホストし、pip を使用して他のプロジェクトにインストールできる場合に簡単に実現できます。このアプローチは、複数のプロジェクト間で共通コードを簡単に共有するのに役立つだけでなく、不適切な依存関係 (つまり、共通コードから非共通コードへの依存関係) を誤って作成するのを防ぐのにも役立ちます。

以下のリンクは、pip と virtualenv を使用して依存関係を管理するための優れた紹介を提供します。これは、この種の問題にのみ使用される非常に一般的なツールチェーンであるため、Python を使用するのにかなり慣れていない場合は、読む価値があります。

http://dabapps.com/blog/introduction-to-pip-and-virtualenv-python/

以下のリンクは、pip を使用して github から依存関係を取得する方法を示しています。

Python Pip インストール ソフトウェアを使用して Github からパッケージをプルするには?

于 2013-06-18T18:45:09.713 に答える
3

...参照されているすべてのパッケージが最上位のプロジェクト フォルダーの下にあり、それに付随していないという前提があるようです。

これは主に、現在の作業ディレクトリがsys.pathデフォルトで最初のエントリであるためです。これにより、そのディレクトリの下にモジュールとパッケージをインポートするのが非常に便利になります。

削除すると、現在の作業ディレクトリからインポートすることさえできなくなります...

$ touch foo.py
$ python
>>> import sys
>>> del sys.path[0]
>>> import foo
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named foo

おそらく正しいアプローチは、共通/フレームワークモジュールを別のプロジェクトで開発し、テストしたら、サイトパッケージフォルダーにインストールして各開発者の環境に展開することであるという考えも思いつきました。

それは開発にとって実際には大きな問題ではありません。バージョン管理を使用していて、すべての開発者が同じ構造のソース ツリーをチェックアウトしている場合は、環境変数やシンボリック リンクをいじる必要なく、コードが正しく機能することを確認するために相対パス ハックを簡単に使用できます。

ただし、これは配布に関しても疑問を投げかけます。

これは、物事がもう少し複雑になる可能性がある場所ですが、ライブラリを使用するプロジェクトとは別にライブラリをリリースすることを計画している場合、および/または複数のプロジェクトインストーラーが同じライブラリを共有している場合に限ります。その場合は、distutilsを見てください。

そうでない場合は、開発で使用されているのと同じ相対パスのハックを使用して、プロジェクトが「すぐに」機能するようにすることができます。

于 2013-06-18T17:55:39.047 に答える
3

これは、配布可能な python パッケージを作成するための最良のリファレンスだと思います。

ハッキングされたサイトにつながるため、リンクは削除されました。

また、単一のディレクトリの下にすべてをネストする必要があるとは思わないでください。次のようなことができます

platform/
    core/
        coremodule
    api/
        apimodule

などを行いますfrom platform.core import coremodule

于 2013-06-18T17:35:26.970 に答える