ããã¸ã§ã¯ããCã½ã¼ã¹ã³ã¼ããPythonããã±ã¼ã¸ã§ä½¿ãã
- 0. æ¦è¦
- 1. C language project å®è£
- 2. CMake å®è£
- 3. Python ç¨ C è¨èª Wrapper å®è£
- 4. Python/C Wrapper ã® CMake å
- 5. Docker 㨠setup.py ã®æ´å
- 6. pyproject.toml ã®æ´å
- github.com
ï¼ï¼ï¼pyproject.toml ã®æ´å
setup.py ã¯å¾æ¥ã¯ä¸»æµã®æ¹æ³ã ã£ãããä»ã§ã¯ deprecated ã¨æãããããã«ãªã£ã¦ãã¾ã£ãã ç¾å¨ã¯ pyproject.toml ã¸ã®ä»¥éãå§ãããã¦ããã ããã§ã¯ãã®å¯¾å¿ãè¡ã£ã¦ãæçµç« ã¨ãããã
- ããã¸ã§ã¯ããCã½ã¼ã¹ã³ã¼ããPythonããã±ã¼ã¸ã§ä½¿ãã
- ï¼ï¼ï¼pyproject.toml ã®æ´å
- 1. 調æ»
- 2. ãã£ã¬ã¯ããªæ§æ
- 3. ããã±ã¼ã¸ã¤ã³ã¹ãã¼ã«
- 4. test å·¥ç¨
- 5. pyproject.toml ãç¨ããããã±ã¼ã¸ã³ã°ã»ã¤ã³ã¹ãã¼ã«
- 6. test å®è¡
- 7. ã¾ã¨ã
1. 調æ»
- ieiringoo, 2022å¹´çpyproject.tomlã使ã£ãPythonããã±ã¼ã¸ã®ä½ãæ¹ -- Qiita, 2022/06
- Python Software Foundation, setup ã¹ã¯ãªãããæ¸ã -- Python Documentation, 2023/09
2. ãã£ã¬ã¯ããªæ§æ
6-pyproject_toml_with_cmake âââ CMakeLists.txt âââ LICENSE âââ README.md âââ build.bash âââ util.bash âââ pyproject.toml (*) âââ setup.cfg (*) âââ setup.py (*) âââ docker â  âââ docker-compose.yml â  âââ mypkg_base â  â  âââ Dockerfile â  âââ mypkg_install â  â  âââ Dockerfile â  âââ mypkg_run â  âââ Dockerfile â  âââ test.bash âââ src â  âââ myapp â  â  âââ CMakeLists.txt â  â  âââ main.c â  âââ mypkg â  â  âââ CMakeLists.txt â  â  âââ include â  â  â  âââ mypkg.h â  â  âââ mypkg.c â  âââ mypkg_wrap â  âââ CMakeLists.txt â  âââ include â  â  âââ mypkg_wrap.h â  âââ mypkg_wrap.c âââ src-python â  âââ mypkg â  âââ __init__.py â  âââ CMakeLists.txt â  âââ core.py âââ tests   âââ CMakeLists.txt   âââ cmake_support.bash   âââ run_test.base.c   âââ run_test.base.h   âââ test_mypkg.c   âââ test_mypkg.py
3. ããã±ã¼ã¸ã¤ã³ã¹ãã¼ã«
$ pip3 install --upgrade build $ pip install virtualenv
4. test å·¥ç¨
åºæ¬çã«ã¯ããã¹ãæ§æã¯ 5ç« ã® Docker ç°å¢ãå¼ãç¶ãã å¤ããã®ã¯ make install ã§å®è¡ãããä¸èº«ã ãã®ã¯ãã ã
ãã ã install/uninstall ãããããããªã£ãããã ã¢ã³ã¤ã³ã¹ãã¼ã«ããã¹ãã§ããããã« mypkg_run ã³ã³ããç¨ã® test.bash ã®å 容ãå¤ãã¦ãããã
#!/usr/bin/env bash set -ex make test ( cd / python3 -c "import mypkg" ) pytest make uninstall ( cd / if python3 -c "import mypkg"; then echo "Uninstallation failed." exit 1 else echo "Uninstallation succeeded." exit 0 fi )
5. pyproject.toml ãç¨ããããã±ã¼ã¸ã³ã°ã»ã¤ã³ã¹ãã¼ã«
pyproject.toml 㨠cmake ã調æ»ããã¨ã ããã¨è¦ã§ã¯ scikit-build ã¨ããã®ããå§ããããã¨åºãã®ã ãã ããã¥ã¡ã³ããååã«åºåã£ã¦ããªãããã«æãããã åããããpyproject.toml ã ãã§å®çµã§ãããï¼ãã¨ããè¨äºãæ£è¦ããããã 調æ»ããç¯å²ã§ã¯ãã¾ããããªãã£ãã setup.py ã ã ãä½¿ãæ¹æ³ã¯ deprecated ãããããªããã pyproject.toml ã ããä½¿ãæ¹æ³ãã¾ãæªæçã§ããããã§ã ç¾ç¶(2023å¹´8æ)ã¯ä¸¡æ¹ã䏿ã使ãåããã®ãããããã ã
ã¾ãã setup.py ã®è¨å®å¤ã¯ã setup.cfg ã«æ¸ãæ¹ãè¯ããããã å®éã ini 風ã®è¨å®ãã¡ã¤ã«ã«ãªã£ã¦ãã¦ããã¡ãã®æ¹ãæ¸ããããã
ã»ã¨ãã© setup.py ããã¡ã¤ã«ã«åãã¦æ¸ãç´ãã ãã«ãªãããã æ¸ãæããçµæãå ã«ç¤ºããã
- pyproject.toml
[build-system] requires = ["setuptools", "wheel"] build-backend = "setuptools.build_meta"
- setup.py
from setuptools import setup setup( packages=["mypkg"], package_data={"mypkg": ["libmypkg.so"]}, package_dir={"": "src-python"}, )
- setup.cfg
[metadata] name = mypkg version = 0.0.1 description = Awesome package. url = https://github.com long_description = file: README.md long_description_content_type = text/markdown license = BSD License 2.0 license_files = LICENSE author = Author author_email = [email protected] classifiers = programming language :: Python :: 3 operating system :: Linux OS [options] install_requires =
ã³ã³ã»ããã¨ãã¦ã¯ã deprecated 㪠setpu.py ã¨ã æªæç㪠pyproject.toml ã®å å®¹ã¯æä½éã«ãªãããã«ãã¦ããã ããã cmake ã¨çµã¿åãããã¨ãããã¨ãããªããã° pyproject.toml ã ãã§ãåé¡ãªãã¨æãã®ã ãã pyproject.toml ã ãã§ã¯ã .so ãã¡ã¤ã«ãææãã¡ã¤ã«ã«å«ããå·¥ç¨ãã©ããã¦ã䏿ããããªãã£ãã
pyproject.toml ã§ã¯ã使ç¨ããã³ã³ãã¤ã«ãã¼ã«ã¨ããã¯ã¨ã³ããæå®ããã ããã¯ã¨ã³ãã¨ããã®ã¯ãã¾ãçè§£ã§ãã¦ããªããã è¦ã¯ setuptools.build_meta ã§æå®ãããã®ãã pyproject.toml ã®å 容ãè§£éãã¦ãã«ãã»ã¤ã³ã¹ãã¼ã«ããã¦ãããæ©è½ãæä¾ãã¦ãããããã ã
次ã«ã setup.py ã«ã¤ãã¦ã¯ãããããã©ããã¦ãåé¢ã§ããªãã£ãæ©è½ãæ®ã£ã¦ããã
ããã±ã¼ã¸åã¨ãã£ã¬ã¯ããªãæå®ãã¦ããã°ã
package_data
ãããææç©ãã£ã¬ã¯ããªã«è¿½å ãããã¡ã¤ã«ãæå®ã§ãã
(å°ã setup.py install
ãä½¿ãæ¹æ³ã§ã¯ä¸æããã£ã¦ãããªãã£ã)ã
æ®ãã®ã³ã³ãã£ã°ã«ã¤ãã¦ã¯ã setup.cfg ã«ç§»ããã¦ããã ä¸é¨ç¬ç¹ã®æ¸ãæ¹ãããã¦ããé¨åãããããåºæ¬çã«ã¯ãããããããªã£ã¦ããã
6. test å®è¡
ããã5ç« ã¨ã»ã¼å¤ãããªãã®ã§çç¥ããã
7. ã¾ã¨ã
æ§æ³ããå®ç¾ã¾ã§æéãããã£ã(主㫠pyproject.toml ã®ãã)ãã pyproject.toml ã使ã£ã¦ Cè¨èª/CMake ãå«ã Python ããã±ã¼ã¸ã ãã«ãã»ã¤ã³ã¹ãã¼ã«ããä¸é£ã®æ¹æ³ãæ¸ããã¨æãã