web-dev-qa-db-ja.com

setuptoolsを使用して、 `python -m mypackage`を呼び出すconsole_scriptsエントリポイントを生成するにはどうすればよいですか?

私は優れたPythonistaになろうとしており、デプロイする予定のパッケージについて PEP 338 をフォローしています。

また、setuptools python setuptools installオプションを使用して、entry_points{'console_scripts': ... }で実行可能スクリプトを生成しようとしています。

Entry_pointsを使用して、python -m mypackageを呼び出す(そして* args、** kwargsを渡す)バイナリを生成するにはどうすればよいですか?

これが私が成功しなかったいくつかの試みです:

setuptools(
...

(1)

entry_points=
       {'console_scripts': ['mypkg=mypkg.__main__'],},

(2)

entry_points=
       {'console_scripts': ['mypkg=mypkg.main'],},

(3)

entry_points=
       {'console_scripts': ['mypkg=python -m mypkg'],},

私が使用している主なリソース:

19

Entry_pointsを使用して、python -m mypackageを呼び出す(そして* args、** kwargsを渡す)バイナリを生成するにはどうすればよいですか?

これは問題の見方が間違っていると思います。スクリプトでpython -m mypackageを呼び出さないようにしますが、スクリプトにpython -m mypackageと同じエントリポイントを持たせます。

この簡単な例を考えてみましょう。

script_proj/
├── script_proj
│   ├── __init__.py
│   └── __main__.py
└── setup.py

ミニマルなsetup.py:

from setuptools import setup

setup(
    name="script_proj",
    packages=["script_proj"],
    entry_points = {
        "console_scripts": [
            "myscript = script_proj.__main__:main",
        ]
    }
)

__main__.pyはダミーモジュールであり、mainメソッドが含まれています。

def main():
    print("Hello world!")

if __name__ == "__main__":
    main()

インストール後、実行可能ファイルmyscriptが作成されます。これは、__main__.pymainメソッドを呼び出します。このパッケージデザインでは、python -m script_projも同じmainメソッドを呼び出します。

19
cel