共有パッケージを使用してPythonアプリケーションをデプロイする
-
11-07-2019 - |
質問
デプロイされるpythonアプリケーションの配置方法を考えています
- / usr / bin /にある実行可能スクリプト。これは、で実装された機能にCLIを提供します
- 現在のsite-packagesディレクトリがある場所にインストールされるライブラリ。
現在、現在、ソースには次のディレクトリ構造があります:
foo.py
foo/
__init__.py
...
これは最善の方法ではないと思います。開発中、すべてが期待どおりに動作しますが、デプロイされると、「from foo import FooObject」」; foo.pyのコードは、foo.py自体をインポートしようとしていますが、これは私が探している動作ではありません。
では、問題は、このような状況を調整する標準的なプラクティスは何ですか?私が考えることができるものの1つは、インストール時にfoo.pyの名前をfooに変更することです。これにより、それ自体のインポートが停止しますが、それはかなり厄介です...
この問題の別の部分は、命名の課題だと思います。おそらく実行可能スクリプトfoo-bin.pyを呼び出しますか?
解決
この記事は非常に優れており、そのための良い方法を示しています。 Do リストの2番目の項目が質問に答えます。
恥知らずなコピーペースト:
Pythonプロジェクトのファイルシステム構造
by 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 / __ init __。py
。 次のようなファイルにテストを配置しますTwisted / twisted / test / test_internet.py
。- 説明するために
Twisted / README
とTwisted / setup.py
を追加し、 ソフトウェアをそれぞれインストールします。 気分がいい場合。しない:
- ソースを
src
またはlib
というディレクトリに置きます。これは難しい インストールせずに実行します。- Pythonパッケージの外部にテストを置きます。これにより、 インストールされたものに対してテストを実行する バージョン。
__ init __。py
のみを持つパッケージを作成し、すべてのコードを__ init __。py
に配置します。モジュールを作るだけ パッケージではなく、シンプルです。- 魔法のハックを考えて、Pythonがモジュールをインポートできるようにします またはユーザーに追加せずにパッケージ それらを含むディレクトリ インポートパス(
PYTHONPATH
または その他のメカニズム)。あなたはしません すべてのケースとユーザーを正しく処理する あなたのときに怒ります ソフトウェアは彼らで動作しません 環境。
他のヒント
Distutils は、モジュール、パッケージ、およびスクリプトのインストールをサポートしています。パッケージとして foo
を、スクリプトとして foo.py
を参照するdistutils setup.py
を作成する場合、 fooです。 py
は / usr / local / bin
またはターゲットOS上の適切なスクリプトインストールパスにインストールされ、 foo
パッケージは次の場所にインストールされます。 site_packages
ディレクトリ。
実行可能ファイルは、 foo.py
ではなく、 foo
だけを呼び出す必要があり、fooをインポートしようとしても使用されません。
適切な名前の付け方:これは要約で答えるのが難しいです。具体的に何をするのかを知る必要があります。たとえば、設定および制御する場合は、-configまたはctlを呼び出すのが適切です。ライブラリのシェルAPIである場合、ライブラリと同じ名前にする必要があります。
あなたのCLIモジュールは別のものです。それをサポートするパッケージは別のものです。名前をモジュール foo
(ファイル foo.py
内)とパッケージ foo
(ディレクトリ foo内)と混同しないでください。
ファイル __ init __。py
)。
foo
という2つのものがあります:モジュールとパッケージです。 foo
に他に名前を付けたいものは何ですか?クラス?機能?変数ですか?
fooモジュールまたはfooパッケージの固有の名前を選択します。たとえば、 foolib
は一般的なパッケージ名です。