2

展開されたpythonアプリケーションをどのように配置するかを考えています

  1. /usr/bin/ にある実行可能スクリプトは、に実装されている機能に CLI を提供します。
  2. 現在の site-packages ディレクトリがある場所にインストールされるライブラリ。

現在、ソースには次のディレクトリ構造があります。

foo.py
foo/
  __init__.py
  ...

これは最善の方法ではないと思います。開発中はすべてが期待どおりに機能しますが、展開すると、foo.py の「from foo import FooObject」コードが foo.py 自体をインポートしようとしているように見えますが、これは私が探している動作ではありません。

では、問題は、このような状況を調整する標準的な方法は何かということです。私が考えることができることの1つは、インストール時にfoo.pyの名前をfooだけに変更することです。これにより、それ自体がインポートされなくなりますが、それはかなり厄介なようです...

問題のもう 1 つの部分は、ネーミングの問題だと思います。おそらく、実行可能スクリプト foo-bin.py を呼び出しますか?

4

4 に答える 4

5

この記事は非常に優れており、そのための良い方法を示しています。Doリストの 2 番目の項目があなたの質問に答えます。

恥知らずなコピペ:

Python プロジェクトのファイルシステム構造

Jpカルデローネ

行う:

  • ディレクトリにプロジェクトに関連する名前を付けます。たとえば、プロジェクトの名前が「Twisted」の場合、そのソース ファイルの最上位ディレクトリに名前を付けますTwisted。リリースするときは、バージョン番号のサフィックスを含める必要があります: Twisted-2.5.
  • ディレクトリTwisted/binを作成し、実行可能ファイルがある場合はそこに配置します。.py Python ソース ファイルであっても、拡張子を付けないでください。プロジェクトの別の場所で定義されたメイン関数のインポートと呼び出し以外のコードをそれらに入れないでください。
  • プロジェクトが単一の Python ソース ファイルとして表現できる場合は、それをディレクトリに配置し、プロジェクトに関連する名前を付けます。たとえば、Twisted/twisted.py. 複数のソース ファイルが必要な場合は、代わりにパッケージを作成し ( Twisted/twisted/、空の Twisted/twisted/__init__.py)、その中にソース ファイルを配置します。たとえば、 Twisted/twisted/internet.py.
  • 単体テストをパッケージのサブパッケージに入れます (注 - これは、上記の単一の Python ソース ファイル オプションがトリックであることを意味します。単体テストには、常に少なくとも 1 つの他のファイルが必要です)。たとえば、 Twisted/twisted/test/. もちろん、 でパッケージ化し Twisted/twisted/test/__init__.pyます。のようなファイルにテストを配置します Twisted/twisted/test/test_internet.py
  • 気分がよければ、それぞれソフトウェアの説明とインストールにTwisted/READMEとを追加してください。Twisted/setup.py

してはいけないこと:

  • srcまたはという名前のディレクトリにソースを置きますlib。これにより、インストールせずに実行するのが難しくなります。
  • テストを Python パッケージの外に置きます。これにより、インストールされたバージョンに対してテストを実行することが難しくなります。
  • のみを持つパッケージを作成し、__init__.pyすべてのコードを に入れます__init__.py。パッケージの代わりにモジュールを作成するだけで、より簡単になります。
  • Python がモジュールまたはパッケージをインポートできるようにするための魔法のハックを思いつくようにしてください。ユーザーはそれを含むディレクトリをインポート パスに追加する必要はありません (PYTHONPATHまたは他のメカニズムを介して)。すべてのケースを正しく処理できるわけではなく、ソフトウェアが自分の環境で動作しない場合、ユーザーは怒ります。
于 2008-12-02T10:57:19.790 に答える
2

Distutilsは、モジュール、パッケージ、およびスクリプトのインストールをサポートしています。パッケージおよびスクリプトとして参照setup.pyするdistutilsを作成する場合は、ターゲットOSにインストールされるか、適切なスクリプトインストールパスがあれば、パッケージをディレクトリにインストールする必要があります。foofoo.pyfoo.py/usr/local/binfoosite_packages

于 2008-11-30T07:30:01.470 に答える
0

実行可能ファイルを呼び出す必要がありますがfoo、ではなくfoo.py、fooをインポートしようとしても使用されません。

正しく命名することに関して:これは要約で答えるのが難しいです。具体的に何をするのかを知る必要があります。たとえば、構成および制御する場合は、-configまたはctlと呼ぶのが適切な場合があります。ライブラリのシェルAPIの場合は、ライブラリと同じ名前にする必要があります。

于 2008-11-30T07:18:10.420 に答える
0

CLI モジュールとそれをサポートするパッケージは別物です。名前をモジュールfoo(ファイル内foo.py) とパッケージfoo(ファイル内のディレクトリfoo内) と混同しないでください__init__.py

fooモジュールとパッケージという名前の 2 つのものがあります。他に何に名前を付けたいfooですか?クラス?機能?変数?

foo モジュールまたは foo パッケージに固有の名前を付けます。 foolibたとえば、 は一般的なパッケージ名です。

于 2008-11-30T12:47:16.323 に答える