1

私はPythonアプリケーションを持っていますが、パッケージ化についての質問がありますが、これは実際にはdistutilsの質問ではなく、コマンドラインから簡単に使用できるようにアプリケーションを整理および設定する方法についての質問です。

アプリケーションに1つのパッケージが含まれていると仮定し、今のところ、必ずしもそれをdistutilsパッケージにしたくないと仮定します(ただし、私は思いとどまる可能性があります)。

pass_persistを使用してNet-SNMPによって実行されるSNMPサブエージェントとしてのプログラム自体。これは質問にとって特に重要ではありません。プログラム全体が実行され、stdoutの応答とともにstdinを読み取ることを意味します。

さらに、エージェントが多かれ少なかれ標準的なPython形式で構造化されていると仮定します

  agent
      __init__.py
      main.py
      <other modules at the same level>

main.pyのような単純なプログラムです

#!/usr/bin/env python
import sys
def main(argv):
    <initialize the environment, input output, logging and so on>
    while <not done>:
         <process an input>
    <clean up and terminate>

if __name__ == '__main__':
    main(sys.argv)

これを実行するように編成する方法はいくつかあるようです。

パッケージをサイトパッケージのどこかに配置し、PATHに次のようなトップレベルのプログラムを配置します。

#!/usr/bin/env python
from agent import main
main(sys.argv)

パッケージディレクトリをどこかに置き、を使用して実行します

/path/to/directory/agent/main.py

(bumpoバージョンでは、エージェントディレクトリをパスのどこかに配置して、実行できるようにしますmain.py

または、コードをインストールして、わからないものをパスに直接配置できる、よりPythonicでクールな3番目のメソッド。

グーグルはあまり役に立たなかった、私はこれがそれらの「答えるにはあまりにも馬鹿げている」質問の1つであると思う。残念ながら、私はそれを知るにはあまりにも愚かです。

4

2 に答える 2

1

「パッケージディレクトリをどこかに置く」がほとんどです。exec残りは、スクリプトを使用して Python インタープリターで使用するシェル スクリプトを作成することmain.pyです。

#!/bin/sh
exec python /usr/share/myapp/main.py "$@"
于 2012-07-01T01:06:10.087 に答える
1

あなたがリストした最初のオプションは、これを行う通常の「Pythonicでクールな」方法です。Distributeを使用して管理することもできるため、より便利に開発できます。完了したら、パッケージ化またはインストールします。Distribute システムは、パッケージング ツールとして使用できるだけでなく、開発の管理にも使用できます。また、ランチャー スクリプトも生成します。でエントリ ポイントを定義するsetup.pyと、最上位のランチャー スクリプトが作成されます。

開発中は、ワークスペースでパッケージを探すように Python 環境を設定する開発モードを設定できます。そのため、次回の実行時に変更がすぐに表示されます。開発後は、egg としてパッケージ化するか、同じソースから RPM または Windows インストーラーをビルドすることもできます。

于 2012-07-01T02:26:11.883 に答える