3

ペットのPythonプロジェクトをリリース可能な状態にしようとしていますが、パッケージ化に関しては困惑しています。

Mark Pilgrimは、DiveIntoPythonでこのディレクトリ構造を推奨しています

httplib2/                 
|  
+--README.txt             
|  
+--setup.py               
|  
+--httplib2/              
    |  
    +--__init__.py  
    |  
    +--iri2uri.py

私が理解できないのは、ランナースクリプト、つまり実行可能なコマンドラインプログラム(fooなど)があり、プロジェクトの名前がfooの場合、内部パッケージディレクトリに何という名前を付ける必要があるかということです。

具体的な例を挙げると、

README.md
LICENSE
somefile1.py
somefile2.py
foo

これをパッケージ化するための最良の方法は何ですか?

例えば

+--README.md
|
+--LICENSE
|
+--foo
|
+--foo/
    |
    +--somefile1.py
    |
    +--somefile2.py

名前が重複しているため、機能しません。

4

1 に答える 1

3

あなたはそれを間違っています...

構造が「あるべき」のは次のとおりです

foo 1.0/
| +--README.txt
| +--setup.py
| +--foo/__init__.py
| +--foo/iri2uri.py
| +--foo/httplib2/__init__.py
| +--foo/httplib2/bar.py

外側の囲みフォルダーをパッケージと考えてください。これには、インストール ファイルとドキュメント ファイルの LICENSE、README、MANIFEST、setup.py が含まれている必要があります。パッケージ内のフォルダー (この場合は「/foo」のみ) がモジュールです。

上記のすべての関数にアクセスするには、次の import ステートメントを使用します。

import foo                # represented by foo/__init__.py
import foo.iri2uri        # represented by foo/iri2uri.py
import foo.httplib2       # represented by foo/httplib2/__init__.py
import foo.httplib2.bar   # represented by foo/httplib/bar.py

技術的には、サブモジュールをファイルまたはフォルダーとして含めることを選択できます。フォルダーは、サブモジュールのサブモジュールがある場合にのみ必要です。

例えば:

foo 1.0/
| +--/foo/iri2uri.py
| +--/foo/iri2uri/__init__.py

どちらも同じように解釈されます。

例えば:

import foo.iri2uri

最初は少しトリッキーですが、インストール用のパッケージをビルドしたことがある人なら誰でも、このスピード バンプに遭遇したことがあります。

更新:これはあなたの質問によく答えると思います

実行可能ファイルの場合、別のパッケージを作成します

このコードは他のアプリケーションによってインポートされないため、インストーラーは必要ありません。

examples/
| +--/foo.py

これらはスタンドアロン プログラムとして実行し、インストールしたライブラリ (foo) から必要なモジュールをインポートする必要があります。

于 2012-04-14T02:22:05.373 に答える