使用python -m build向setuptools传递egg_info构建选项遇阻求助
解决方案:在PEP517隔离构建中传递setuptools的--tag-build参数
1. 正确传递参数的命令格式
你之前的错误在于将egg_info作为build-option传递,导致setuptools命令解析混乱,和build模块自动传递的--dist-dir参数冲突。正确的方式是通过config-setting直接指定egg_info子命令的参数:
python3 -m build --wheel '--config-setting=egg_info.args=-bpost20240119000000'
如果需要同时传递-v( verbose)参数,合并为:
python3 -m build --wheel '--config-setting=egg_info.args=-v -bpost20240119000000'
2. 环境变量方案(更适合CI/CD场景)
在CI/CD中,通过环境变量传递版本标签更灵活,且能在隔离环境中生效:
- 在调用build前设置环境变量:
export BUILD_TAG=post$(date +%Y%m%d%H%M%S) python3 -m build --wheel
- 修改
setup.py读取该环境变量:
import os from setuptools import setup # 基础版本号 BASE_VERSION = "1.0.0" # 追加构建标签(如果存在) VERSION = BASE_VERSION + os.environ.get("BUILD_TAG", "") setup( version=VERSION, # ...其他原有配置 )
build模块默认会将父环境的环境变量传递到隔离构建环境中,无需额外配置。
3. 保留临时构建环境用于排查
使用--keep-temp选项可以让build模块不删除临时构建环境,方便后续调试:
python3 -m build --wheel --keep-temp '--config-setting=egg_info.args=-bpost20240119000000'
执行后,临时环境路径会输出到控制台(类似/tmp/build-env-xxxxxx),你可以激活该虚拟环境并手动执行命令排查问题:
source /tmp/build-env-xxxxxx/bin/activate # 手动执行setuptools命令验证 python setup.py egg_info -bpost20240119000000 bdist_wheel
内容的提问来源于stack exchange,提问作者Steven Hespelt
相关产品推荐
相关产品推荐

