2011-12-23 14 views
3

mypackageというPythonパッケージがあるとします。このパッケージには一連のスクリプトがあります。 mypackageがsite-packagesディレクトリに置かれると、ユーザはmypackage内のさまざまなPythonファイルをPythonのmypackage.submodule1、mypackage.submodule2というようにいつものように参照できます。ただし、これらはコマンドラインから呼び出されるスクリプトです。例えばsubmodule1では、私が持っている:Pythonパッケージで実行スクリプトを配布する適切な方法は?

== 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」を含むサイトパッケージなどの最上位ディレクトリのみがPYTHONPATHにあるはずです)

ありがとうございました。

答えて

3

は、一般的な考え方は、ユーザがPythonはsetup.py installを実行したときに、スクリプトがパス上に置かれますように、setup.pyファイルを配布することであるhttp://docs.python.org/distutils/setupscript.html#installing-scripts

を参照してください。ほぼすべてのパッケージ配布方法がこれをサポートしています。上記の文書に従っている場合、ユーザーはeasy_installpip installなどのようにシステムで許可されています。

野生の例については、https://github.com/django/django/blob/master/setup.pyを参照してください。そこファイルの先頭に設定の多くはあるが、重要なビットを使用すると、これは、Djangoのパッケージをインストールするユーザーのためのdjango-admin.pyコマンドを設定

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

を見ることができます下、です。インストールが完了すると、コマンドラインからdjango-admin.py arg1 arg2 ...を実行できます。

+0

これは、/ opt/local/Library/Frameworks/Python.framework/Versions/3.4/bin'にPATHにないスクリプトを置くようです。 – qed

0

私はこれを行う典型的な方法は、ユーザーのPATHにある/usr/local/binのような場所にスクリプトとして実行するモジュールを配置することだと考えています。あなたが通訳を指定せずにスクリプトを呼び出すことができるように、あなたはうまくいくはずです。

+0

しかし、ユーザーがパッケージをインストールすると、サイトパッケージに入れられます。したがって、/some/path/site-packages/mypackage/submodule1.pyになります。スクリプトを/ usr/local/binに表示させるにはどうすればよいですか?ユーザーはインストールの一環として自分自身をコピーする必要がありますか?それはclunkyと思われる – user248237dfsf

関連する問題