Google Cloud App Engine部署失败:python setup.py egg_info执行出错
解决GAE Flex部署中pip升级及google-cloud安装失败问题
先帮你拆解下核心问题:
- 虽然你在
requirements.txt里指定了pip==10.0.1,但Cloud Build还是用旧版本的pip(9.0.3)处理google-cloud包的安装,导致setup.py egg_info报错。这是因为在同一个pip install -r requirements.txt命令中,升级pip的操作不会立即生效——当前运行的pip进程还是旧版本,没法在安装依赖的过程中替换自己。 - 另外,你用的
google-cloud==0.33.0是很老的元包,官方早已废弃,它的打包本身就存在问题(找不到setup-README.rst文件),这也是报错的直接诱因。
下面给你两个可行的解决方案:
方案一:用自定义Dockerfile控制构建流程(推荐)
通过自定义Dockerfile,我们可以先强制升级pip,再安装所有依赖,确保整个过程用的都是新版本pip。
- 在项目根目录创建
Dockerfile,内容如下:
# 基于GAE官方Python镜像 FROM gcr.io/google-appengine/python # 创建Python3.6虚拟环境 RUN virtualenv /env -p python3.6 # 设置虚拟环境的环境变量,确保后续命令都用虚拟环境里的Python/Pip ENV VIRTUAL_ENV /env ENV PATH /env/bin:$PATH # 先升级pip到指定版本 RUN pip install --upgrade pip==10.0.1 # 安装项目依赖 ADD requirements.txt /app/requirements.txt RUN pip install -r /app/requirements.txt # 复制项目代码到容器 ADD . /app # 设置启动命令,和你原来的entrypoint保持一致 ENTRYPOINT ["gunicorn", "-b", ":$PORT", "main:app"]
- 修改
app.yaml,指定使用自定义运行时:
runtime: custom env: flex manual_scaling: instances: 1 resources: cpu: 1 memory_gb: 0.5 disk_size_gb: 10
这样构建时会先执行pip install --upgrade pip,确保后续安装依赖用的是新版本pip,彻底解决版本不兼容的问题。
方案二:替换废弃的google-cloud元包
旧版google-cloud元包已经被官方拆分,现在推荐使用对应服务的独立包(比如google-cloud-storage、google-cloud-pubsub等)。这些新包打包更规范,对pip版本的兼容性也更好。
- 打开
requirements.txt,删除google-cloud这一行,替换成你实际需要的服务包。比如如果用到云存储,就写:
pip==10.0.1 Flask==0.12.2 gunicorn==19.7.1 oauth2client==4.1.2 google-cloud-storage==2.15.0 # 按需选择合适版本
- 本地测试时,先手动升级pip再安装依赖:
pip install --upgrade pip==10.0.1 pip install -r requirements.txt
确认本地能正常运行后,再重新部署到GAE。
本地验证方法
部署前可以先本地测试构建流程,提前排查问题:
docker build -t gae-test . docker run -p 8080:8080 gae-test
如果本地能正常启动服务,说明构建流程没问题,再推送到GAE部署即可。
内容的提问来源于stack exchange,提问作者Arhire Ionut
相关产品推荐
相关产品推荐

