0

ディレクトリ構造が次のような単純な python アプリケーションがあります。

  • 事業/
    • main.py
    • config.py
    • プラグイン/
      • プラグイン1
      • プラグイン2
      • ...

Config.py は構成ファイルのみをロードし、それ自体には構成情報は含まれていません。

私は今このプログラムを配布したいと思っています。ユーザーが使用することが期待されるファイルは main.py であるため、1 つのファイルは明確に /usr/bin に入り、残りのファイルは /usr/share/project に入ります。

しかし、問題が 1 つあります。共有ディレクトリで config.py を探すように main.py に何らかの方法で指示する必要があります。しかし、それはsetuptools次第なので、共有ディレクトリが正確にどこにあるのか本当にわかりませんよね?

Python ベースのアプリケーションを配布する際のベスト プラクティスは何ですか?

4

1 に答える 1

11

setuptoolsは、Python から到達可能な場所にパッケージをインストールします。つまり、インポートできます。

import project

絶対インポートではなく相対インポートを行うと、問題が発生します。main.pyインポートconfig.pyすると、同じディレクトリにあるため機能します。PATHmain.py環境変数に存在する別の場所/usr/binまたは別の場所に移動すると、pythonはパッケージディレクトリからではなく、からインポートしようとします。解決策は絶対インポートを使用することです:config.pysys.path

from project import config

main.pyは「可動」です。

私が好む別の解決策は、 setuptoolsによって提供される自動スクリプト作成を使用することです。

コードを

if __name__ == "__main__":
    # here all your beautiful code

ステートメントで、コードを関数に入れます (メインは適切な名前かもしれません):

def main():
    # put your code here

if __name__ == "__main__":    # not needed, just in case...
    main()

今あなたを変更しますsetup.py

setup(
    # ...
    entry_points = {
        "console_scripts": [
            # modify script_name with the name you want use from shell
            # $ script_name [params]
            "script_name = project.main:main",
        ],
    }
)

それで全部です。インストール後、setuptoolsは、シェルから呼び出すことができ、メイン関数を呼び出すラッパー スクリプトを作成します。プロジェクトディレクトリに置くことができるようmain.pyになり、ディレクトリに移動する必要がなくなりましたbin/setuptoolsは、このスクリプトをbin/インストール プレフィックスに関連するディレクトリに自動的に配置することに注意してください。

エス。

python setup.py install --prefix ~/.local

プロジェクトパッケージをインストールします

~/.local/lib/python<version>/site-packages/<package_name>

そしてあなたのスクリプト

~/.local/bin/<script_name>

PATH~/.local/bin環境に存在することを確認してください。

詳細: http://peak.telecommunity.com/DevCenter/setuptools#automatic-script-creation

于 2010-01-09T21:00:37.037 に答える