如何在pyproject.toml中配置setuptools的entry_points?
问题:如何在pyproject.toml中配置setuptools的entry_points?
原setup.py中的entry_points配置
原setup.py里的entry_points配置如下:
#!/usr/bin/env python from setuptools import setup, find_packages setup( name="myproject", package_dir={"": "src"}, packages=find_packages("src"), entry_points={ "console_scripts": [ "my-script = myproject.myscript:entrypoint", ], }, )
错误的pyproject.toml尝试及问题
迁移配置到pyproject.toml时写法有误,执行pip install -e .会触发pip._vendor.tomli.TOMLDecodeError: Invalid value错误,错误指向entry-points行:
[build-system] requires = ["setuptools", "setuptools-scm"] build-backend = "setuptools.build_meta" [metadata] name = "myproject" [tool.setuptools] package-dir = {"": "src"} [tool.setuptools.packages.find] where = ["src"] [tool.setuptools.dynamic] entry-points = my-script = myproject.myscript:entrypoint
正确的两种配置方式
方式一:使用dynamic.entry-points的INI格式多行字符串
按照entry-points规范的INI格式,用多行字符串包裹内容:
[build-system] requires = ["setuptools", "setuptools-scm"] build-backend = "setuptools.build_meta" [metadata] name = "myproject" [tool.setuptools] package-dir = {"": "src"} [tool.setuptools.packages.find] where = ["src"] [tool.setuptools.dynamic] entry-points = """ [console_scripts] my-script = myproject.myscript:entrypoint """
方式二:使用tool.setuptools.entry-points的TOML表结构(更直观)
直接通过TOML的表结构定义entry-points,无需INI格式字符串:
[build-system] requires = ["setuptools", "setuptools-scm"] build-backend = "setuptools.build_meta" [metadata] name = "myproject" [tool.setuptools] package-dir = {"": "src"} [tool.setuptools.packages.find] where = ["src"] [tool.setuptools.entry-points."console_scripts"] my-script = "myproject.myscript:entrypoint"
存根setup.py说明
你使用的存根setup.py无需修改,它可以正常支持pip install -e .的可编辑安装:
from setuptools import setup if __name__ == "__main__": setup()
内容的提问来源于stack exchange,提问作者Croad Langshan
相关产品推荐
相关产品推荐

