能否在pyproject.toml中指定平台相关的包数据?
针对不同平台配置setuptools包数据的方法
当然可以针对不同平台分别指定包数据,这里提供两种实用的实现方式:
方法一:利用pyproject.toml的平台专属配置
setuptools支持通过platform:前缀为不同平台单独配置包数据,直接在pyproject.toml中添加对应平台的配置块即可:
# 通用包数据,所有平台都会包含 [tool.setuptools.package-data] "somemodule.somepackage" = ["common-data.ext"] # Windows专属包数据 [tool.setuptools.package-data.platform:win32] "somemodule.somepackage" = ["somedataforwindowsonly.ext"] # Linux专属包数据 [tool.setuptools.package-data.platform:linux] "somemodule.somepackage" = ["somedataforlinuxonly.ext"]
- 常用平台标识:
win32对应Windows,linux对应Linux,darwin对应macOS,freebsd对应FreeBSD - 平台专属配置会和通用配置合并,最终该包的数据集是两者的并集
方法二:通过代码动态配置(兼容旧项目)
如果需要更复杂的平台判断逻辑,可以在setup.py中通过代码实现,动态生成package_data:
import sys from setuptools import setup # 初始化通用包数据 package_data = { "somemodule.somepackage": ["common-data.ext"] } # 根据平台添加专属数据 if sys.platform.startswith("win"): package_data["somemodule.somepackage"].append("somedataforwindowsonly.ext") elif sys.platform.startswith("linux"): package_data["somemodule.somepackage"].append("somedataforlinuxonly.ext") setup( # 项目基础配置(名称、版本等) name="your-project-name", version="0.1.0", packages=["somemodule.somepackage"], package_data=package_data )
注意:如果同时存在pyproject.toml和setup.py的配置,两者会自动合并,且pyproject.toml的配置优先级更高。
内容的提问来源于stack exchange,提问作者Vince W.
相关产品推荐
相关产品推荐

