質問

デプロイされるpythonアプリケーションの配置方法を考えています

  1. / usr / bin /にある実行可能スクリプト。これは、で実装された機能にCLIを提供します
  2. 現在の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 は一般的なパッケージ名です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top