4

一連のスクリプトを含むmypackageというPythonパッケージがあるとします。mypackageがsite-packagesディレクトリに入ると、ユーザーは通常どおり、mypackage内のさまざまなPythonファイルをPythonのmypackage.submodule1、mypackage.submodule2として参照できます。ただし、これらの一部は、コマンドラインから呼び出すことを目的としたスクリプトです。たとえば、submodule1には、次のものがあります。

== mypackage/submodule1.py ==

if __name__ == '__main__':
  main()

def main():
  # parse command line options here, do stuff

「mypackage」がパスに含まれると、ユーザーがこれらのサブモジュールをコマンドラインスクリプトとしてクリーンに使用できるように、mypackageを適切に配布/パッケージ化するにはどうすればよいですか?私はあなたができると思ったでしょう:

python mypackage.submodule1.py arg1 arg2 ...

しかし、この構文は無効です。言い換えると、実際の「mypackage」ディレクトリをPYTHONPATHに含めることなく、ユーザーがパッケージのサブモジュールをPyからインポートするのではなく、スクリプトとして参照するにはどうすればよいでしょうか。(「mypackage」を含むsite-packagesなどのトップレベルディレクトリのみがPYTHONPATHに含まれている必要があります。)

ありがとう。

4

2 に答える 2

4

http://docs.python.org/distutils/setupscript.html#installing-scriptsを参照してください

一般的な考え方は、ユーザーがpython setup.py installを実行すると、スクリプトがパスに配置されるように、setup.pyファイルを配布することです。ほぼすべてのパッケージ配布方法がこれをサポートしています。上記のドキュメントに従えば、ユーザーはシステムが許す限りeasy_installpip installなどを行うことができます。

実際の例については、https://github.com/django/django/blob/master/setup.pyを参照してください。ファイルの上部には多くの構成がありますが、重要な部分は下部にあり、ここで確認できます。

setup(
    ...
    scripts = ['django/bin/django-admin.py'],
    ...
)

django-admin.pyこれにより、djangoパッケージをインストールするユーザー向けのコマンドが設定されます。インストールすると、django-admin.py arg1 arg2 ...コマンドラインから実行できるようになります。

于 2011-12-23T22:14:33.727 に答える
0

/usr/local/binこれを行う典型的な方法は、スクリプトとして実行したいモジュールを、ユーザーの PATHなどの場所に配置することだと思います。インタープリターを指定せずにスクリプトを呼び出すことができるように、シバン行を含めれば問題ありません。

于 2011-12-23T21:57:11.980 に答える