如何确保GitHub Actions生成的requirements.txt部署至Google Cloud Function?
解决GitHub Actions部署Google Cloud Function的依赖问题
一、修复requirements.txt的依赖生成问题
1. 正确导出Pipenv依赖
默认pipenv requirements只会输出PyPI源配置,必须指定导出生产环境依赖:
pipenv requirements --without-dev > requirements.txt
如果你的项目依赖都标记为开发包(不推荐),用这条命令:
pipenv requirements > requirements.txt
2. 验证导出结果
生成文件后加一步校验,避免空依赖文件流入部署环节:
# 打印文件内容确认 cat requirements.txt # 或者直接检查目标依赖是否存在 grep -q "aiohttp" requirements.txt || (echo "ERROR: aiohttp未出现在requirements.txt中" && exit 1)
二、确保requirements.txt被正确部署
1. 明确部署命令的工作目录
使用gcloud functions deploy时,必须通过--source参数指定包含requirements.txt和代码的目录(通常是当前根目录):
gcloud functions deploy 你的函数名 \ --runtime python311 \ --trigger-http \ --source . \ --entry-point 你的入口函数名
2. 检查忽略文件配置
确认项目根目录的.gitignore和.gcloudignore里没有requirements.txt条目,否则部署时会被过滤掉。
三、完整优化后的GitHub Actions工作流示例
name: 部署到Google Cloud Function on: push: branches: [ main ] jobs: deploy: runs-on: ubuntu-latest steps: - name: 拉取代码 uses: actions/checkout@v4 - name: 配置Python环境 uses: actions/setup-python@v5 with: python-version: '3.11' - name: 安装Pipenv run: | python -m pip install --upgrade pip pip install pipenv - name: 生成requirements.txt run: pipenv requirements --without-dev > requirements.txt - name: 验证依赖文件 run: | if ! grep -q "aiohttp" requirements.txt; then echo "aiohttp未出现在依赖文件中,终止部署" exit 1 fi - name: 谷歌云认证 uses: google-github-actions/auth@v2 with: credentials_json: ${{ secrets.GCP_SA_KEY }} - name: 部署云函数 run: | gcloud functions deploy 你的函数名 \ --runtime python311 \ --trigger-http \ --source . \ --entry-point 你的入口函数名
内容的提问来源于stack exchange,提问作者ianyoung
相关产品推荐
相关产品推荐

