You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AWS CodePipeline部署时遭遇'urllib3.packages'模块未找到错误

问题排查与解决建议

核心原因分析

  1. urllib3内部模块变更:urllib3从v2.0版本开始,移除了urllib3.packages这个内部私有模块,不再允许外部代码直接导入该路径下的内容。你当前安装的urllib3大概率是高版本,导致urllib3.packages不存在。
  2. 冗余且错误的导入语句:代码里从urllib3.packages导入six完全没必要——six已经是requirements.txt中单独声明的依赖包,直接导入six即可;另外from .packages.six import ...是相对导入,你的项目结构中并没有packages子目录,这也是错误的。
  3. requirements.txt版本号不合法:文件中Flask-WTF==1.2.、flask-cors==4.0.的版本号格式错误(末尾缺少数字),会导致pip安装时出现不可预期的版本选择或安装失败。
  4. Dockerfile中依赖安装逻辑混乱:反复执行pip3 uninstall urllib3、多次升级urllib3的操作会导致依赖版本不稳定,且部分依赖(如flask、flask-cors)在requirements.txt中已经声明,无需单独安装。

具体修复步骤

1. 修正Python代码中的导入语句

修改mythicalMysfitsService.py的导入部分,替换错误的导入:

from flask import Flask, jsonify, json, Response, request
from flask_cors import CORS
# 直接导入six,不需要从urllib3.packages导入
import six
# 如果需要HTTPConnection和HTTPException,直接从six.moves.http_client导入
from six.moves.http_client import HTTPConnection as _HTTPConnection, HTTPException
import mysfitsTableClient

注:six库已经封装了Python2/Python3的兼容层,HTTPConnection和HTTPException可以直接从six.moves.http_client获取,无需依赖urllib3的内部模块。

2. 修复requirements.txt的版本号问题

修正文件中不合法的版本号,同时限制urllib3版本(如果需要兼容旧逻辑):

boto3>=1.11.16
Werkzeug==2.3.0
Flask==2.3.0
Flask-Bcrypt==1.0.1
Flask-Login==0.6.2
Flask-SQLAlchemy==3.1.1
# 修正Flask-WTF的版本号为合法格式
Flask-WTF==1.2.1
# 修正flask-cors的版本号为合法格式
flask-cors==4.0.0
requests
six
# 指定urllib3的兼容版本(保留packages模块的最后大版本)
urllib3<2.0

3. 简化Dockerfile的依赖安装逻辑

删除冗余的依赖安装命令,确保依赖安装顺序合理:

FROM ubuntu:latest
ENV PIP_BREAK_SYSTEM_PACKAGES 1

# 安装系统依赖并清理缓存
RUN apt-get update -y && apt-get install -y python3 python3-pip python3-dev build-essential && rm -rf /var/lib/apt/lists/*

# 复制应用文件并设置工作目录
COPY ./service /MythicalMysfitsService
WORKDIR /MythicalMysfitsService

# 升级pip并统一安装依赖
RUN pip3 install --upgrade pip && pip3 install -r ./requirements.txt

ENTRYPOINT ["python3"]
CMD ["mythicalMysfitsService.py"]

优化点:

  • 合并系统依赖安装命令,减少镜像分层
  • 先升级pip再安装依赖,避免版本兼容问题
  • 删除单独安装flask、flask-cors、boto3的命令,统一通过requirements.txt管理
  • 删除冗余的urllib3卸载/重装操作

4. 验证部署环境的依赖一致性

在本地构建镜像并测试,确保依赖安装正确:

# 构建镜像
docker build -t mythical-mysfits .
# 运行容器测试
docker run -p 8080:8080 mythical-mysfits

如果本地测试正常,再推送镜像到AWS容器服务(如ECR),然后重新触发CodePipeline部署。


内容的提问来源于stack exchange,提问作者Retrospect

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 18:40:16