构建自定义.whl文件时,如何向setup.py传递参数?
解决方案
下面是几种更优雅的实现方式,替代文件读写传递版本参数:
方法1:通过环境变量传递版本号
在调用构建命令前设置环境变量,再在setup.py中读取该变量:
构建脚本中的调用逻辑(Linux/macOS):
import os version = "1.0.9" os.system(f'export LIB_VERSION={version} && python ./LoggerLib/setup.py bdist_wheel')Windows环境下替换为:
import os version = "1.0.9" os.system(f'set LIB_VERSION={version} && python ./LoggerLib/setup.py bdist_wheel')setup.py中获取版本:from setuptools import setup import os setup( name="LoggerLib", version=os.environ.get("LIB_VERSION", "0.0.1"), # 第二个参数为默认版本 # 其他配置项... )
方法2:自定义命令行参数(提前过滤)
在setup.py中先识别自定义的版本参数,移除后再交给setuptools处理,避免被识别为无效命令:
修改
setup.py:from setuptools import setup import sys # 默认版本号 lib_version = "0.0.1" # 识别并提取自定义版本参数 if "--lib-version" in sys.argv: arg_index = sys.argv.index("--lib-version") if arg_index + 1 < len(sys.argv): lib_version = sys.argv[arg_index + 1] # 移除自定义参数,防止setuptools报错 del sys.argv[arg_index:arg_index + 2] setup( name="LoggerLib", version=lib_version, # 其他配置项... )执行构建命令:
python ./LoggerLib/setup.py bdist_wheel --lib-version 1.0.9
方法3:动态修改配置文件(setup.cfg)
如果你的项目使用setup.cfg管理配置(推荐方式),可以先动态替换版本号再执行构建:
先在
setup.cfg中设置版本占位符:[metadata] name = LoggerLib version = __VERSION__ # 其他配置...构建脚本中替换版本并执行:
import os from pathlib import Path version = "1.0.9" cfg_path = Path("./LoggerLib/setup.cfg") # 读取并替换版本号 with open(cfg_path, "r") as f: cfg_content = f.read().replace("__VERSION__", version) with open(cfg_path, "w") as f: f.write(cfg_content) # 执行构建 os.system("python ./LoggerLib/setup.py bdist_wheel")
内容的提问来源于stack exchange,提问作者Paweł Pietraszko
相关产品推荐
相关产品推荐

