■ はじめに
https://dk521123.hatenablog.com/entry/2024/03/19/000000
で、setuptoolsを使ったが、今日、色々と不具合対応して 学んだことがあったので、メモしておく
目次
【1】setup.py の 文法 1)entry_points 【2】ヘルパー関数 find_packages() 1)構文 2)使用上の注意 【3】MANIFEST.in 1)サンプル
【1】setup.py の 文法
https://github.com/pypa/sampleproject/blob/db5806e0a3204034c51b1c00dde7d5eb3fa2532e/setup.py
from setuptools import setup, find_packages setup( name="sampleproject", # Required version="2.0.0", # Required description="A sample Python project", # Optional long_description=long_description, # Optional long_description_content_type="text/markdown", # Optional (see note above) url="https://github.com/pypa/sampleproject", # Optional author="A. Random Developer", # Optional author_email="author@example.com", # Optional classifiers=[ # Optional "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "Topic :: Software Development :: Build Tools", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3 :: Only", ], keywords="sample, setuptools, development", # Optional package_dir={"": "src"}, # Optional packages=find_packages(where="src"), # Required python_requires=">=3.7, <4", install_requires=["peppercorn"], # Optional extras_require={ # Optional "dev": ["check-manifest"], "test": ["coverage"], }, package_data={ # Optional "sample": ["package_data.dat"], }, entry_points={ # Optional "console_scripts": [ "sample=sample:main", ], }, project_urls={ # Optional "Bug Reports": "https://github.com/pypa/sampleproject/issues", "Funding": "https://donate.pypi.org", "Say Thanks!": "http://saythanks.io/to/example", "Source": "https://github.com/pypa/sampleproject/", }, )
1)entry_points
* 実行するファイルと関数を指定
ディレクトリ構成例
democli ├── demo │ ├── __init__.py │ └── hello.py
setup.py
entry_points={ "console_scripts": [ # demo/hello.py の main 関数を指定 "demo=demo.hello:main", ] },
【2】ヘルパー関数 find_packages()
* setup.py の packages について、固定でも指定可能だが find_packages()を使った方が、便利
1)構文
packages=find_packages()
Options
https://setuptools.pypa.io/en/latest/userguide/quickstart.html#package-discovery
from setuptools import setup, find_packages # or find_namespace_packages setup( # ... packages=find_packages( # All keyword arguments below are optional: where='src', # '.' by default include=['mypackage*'], # ['*'] by default exclude=['mypackage.tests'], # empty by default ), # ... )
2)使用上の注意
* package に「__init__.py」がないと パッケージとして認識されないので注意
ディレクトリ構成例
democli ├── demo │ ├── sample │ │ └── world.py <- 「__init__.py」がないので「demo.sample」は認識されない │ ├── __init__.py <- 「__init__.py」があるので「demo」は認識される │ └── hello.py
【3】MANIFEST.in
* 設定ファイルを追加した場合とかに使う
https://packaging.python.org/ja/latest/guides/distributing-packages-using-setuptools/#manifest-in
より抜粋 ~~~~~~~~~ 自動的に追加されるファイル以外のファイルをソースコード配布物に追加したい場合には、 MANIFEST.in が必要になります。 どんなファイルがデフォルトで自動的に追加されるのかも含めて、 MANIFEST.in の書き方の詳細については「MANIFEST.in の使い方」を見てください。 ~~~~~~~~~
MANIFEST.in の使い方
https://setuptools.pypa.io/en/latest/userguide/miscellaneous.html#using-manifest-in
1)サンプル
https://github.com/sqlfluff/sqlfluff/blob/main/plugins/sqlfluff-plugin-example/MANIFEST.in
# 「src/sqlfluff_plugin_example/plugin_default_config.cfg」を追加 include src/sqlfluff_plugin_example/plugin_default_config.cfg
参考文献
MANIFEST.in
https://nikkie-ftnext.hatenablog.com/entry/python-packaging-setup-include-package-data-with-manifest-in
関連記事
パッケージ配布 ~ setup.pyによる作成方法 ~
https://dk521123.hatenablog.com/entry/2024/03/19/000000
パッケージ配布 ~ pyproject.tomlによる作成方法 ~
https://dk521123.hatenablog.com/entry/2024/03/28/000000
egg / wheel ファイルを作成する
https://dk521123.hatenablog.com/entry/2020/02/09/234350
パッケージ管理 ~ pip ~
https://dk521123.hatenablog.com/entry/2021/07/02/000000
オフライン環境下で pip install するには
https://dk521123.hatenablog.com/entry/2021/07/10/164833