Ubuntu容器构建ruamel.yaml缺python-dev,如何强制使用纯Python实现?
强制ruamel.yaml使用纯Python实现的方法
方案1(适配CI/tox场景,最推荐)
ruamel.yaml内置了官方的环境变量开关,安装前设置RUAMEL_YAML_NO_EXTENSIONS=1即可完全跳过C扩展编译流程,直接使用纯Python实现。
针对你使用tox的构建场景,直接在tox.ini的测试环境配置块中添加如下配置即可:
[testenv] setenv = RUAMEL_YAML_NO_EXTENSIONS=1 # 其余原有配置不需要修改
如果是手动执行安装,使用如下命令即可:
RUAMEL_YAML_NO_EXTENSIONS=1 pip install ruamel.yaml
方案2(解决缓存导致的异常)
如果构建环境存在pip缓存的旧版本构建产物,建议先清理已安装的相关包再重新安装:
pip uninstall -y ruamel.yaml ruamel.yaml.clib RUAMEL_YAML_NO_EXTENSIONS=1 pip install ruamel.yaml
异常原因说明
你遇到的Python3.8测试正常、Python3.9测试失败的情况,是因为对应版本的ruamel.yaml为Python3.8提供了适配Ubuntu18的预编译wheel包,无需本地编译即可直接安装;而Python3.9没有对应适配的预编译包,默认会触发本地编译C扩展的流程,才会报Python头文件缺失的错误。
内容的提问来源于stack exchange,提问作者32bits
相关产品推荐
相关产品推荐

