如何为基于setuptools的pip项目按操作系统指定不同包依赖?
基于setuptools实现跨平台依赖自动选择安装
针对需要根据操作系统自动选择安装不同依赖包的场景(比如Linux装tensorflow、Mac装tensorflow-macos),用setuptools可以通过以下两种方式实现:
方法一:在setup.py中配置带环境标记的依赖
直接在install_requires里给每个依赖加上PEP 508标准的环境标记,pip会根据当前系统自动筛选:
from setuptools import setup setup( name="your-project-name", version="0.1.0", # 其他项目配置(如author、description等) install_requires=[ # Linux系统安装tensorflow "tensorflow; sys_platform == 'linux'", # MacOS系统安装tensorflow-macos "tensorflow-macos; sys_platform == 'darwin'" ] )
方法二:通过pyproject.toml配置(推荐现代项目使用)
如果项目已经采用pyproject.toml管理构建配置,同样可以添加带环境标记的依赖:
[project] name = "your-project-name" version = "0.1.0" # 其他项目配置 dependencies = [ "tensorflow; sys_platform == 'linux'", "tensorflow-macos; sys_platform == 'darwin'" ] [build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta"
进阶:更精细的平台区分
如果需要针对Mac的不同架构(比如Intel vs Apple Silicon)追加依赖,还可以扩展环境标记:
# setup.py示例 install_requires=[ "tensorflow; sys_platform == 'linux'", "tensorflow-macos; sys_platform == 'darwin'", # Apple Silicon的Mac额外安装tensorflow-metal加速 "tensorflow-metal; sys_platform == 'darwin' and platform_machine == 'arm64'" ]
注意事项
- 环境标记的语法需符合PEP 508规范,常用的标记包括
sys_platform(系统平台)、platform_machine(硬件架构)等 - 确保使用的pip版本不低于19.0,旧版本可能不支持环境标记筛选功能
内容的提问来源于stack exchange,提问作者jonalv
相关产品推荐
相关产品推荐

