私は優れた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'],},
私が使用している主なリソース:
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__.py
のmain
メソッドを呼び出します。このパッケージデザインでは、python -m script_proj
も同じmain
メソッドを呼び出します。