Docker构建Python3.10项目报错:pathlib无法从collections导入Sequence
问题根源
- 你的Dockerfile使用
python:3标签,目前该标签对应最新的Python 3.10+版本,pathlib从Python 3.4开始已经纳入标准库,无需额外安装第三方pathlib包 - 你依赖的
artifactory==0.1.17是老旧版本,强制要求安装第三方pathlib包,而第三方pathlib 1.0.1最高仅支持Python 3.9,在Python 3.10+环境下安装时会因为Sequence导入路径变更报错
可行解决方案
方案1:固定Docker基础镜像为Python 3.9版本(改动最小,最快生效)
修改你的Dockerfile第一行,把FROM python:3替换为FROM python:3.9,不需要改动requirements.txt内容,重新构建即可。该方案适配你当前所有依赖的版本要求,不需要调整依赖组合。
方案2:升级artifactory依赖,移除对第三方pathlib的要求
新版本的artifactory包已经修复了强制依赖第三方pathlib的问题,你可以把requirements.txt里的artifactory==0.1.17替换为更高的兼容版本,比如artifactory==0.1.21,该版本已经不再依赖第三方pathlib,适配Python 3.10+环境。修改后重新构建镜像即可。
方案3:安装依赖时排除pathlib包
如果不想调整artifactory版本也不想降级Python,可以在pip安装命令里添加排除参数,修改Dockerfile中的安装命令为:
RUN pip install --no-cache-dir -r requirements.txt --exclude pathlib
直接忽略artifactory对pathlib的依赖要求,使用Python内置的标准库pathlib即可。
内容的提问来源于stack exchange,提问作者Lucas Rahn
相关产品推荐
相关产品推荐

