在Monorepo中使用actions/setup-python搭配Poetry缓存的问题
解决Monorepo中setup-python结合Poetry找不到pyproject.toml的问题
错误本质是:setup-python已经成功安装了Python 3.10.0,但后续执行poetry env use时,当前工作目录是仓库根目录,而你的pyproject.toml在Monorepo的子目录中,导致Poetry无法定位到项目配置文件。以下是具体解决方法:
方法1:切换到子项目目录执行Poetry命令
在GitHub Actions步骤中,先切换到包含pyproject.toml的子目录,再执行Poetry相关操作:
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: 安装Python 3.10.0 uses: actions/setup-python@v4 with: python-version: '3.10.0' - name: 配置Poetry并安装依赖 run: | # 替换为你的子项目实际路径,比如packages/my-python-service cd ./path/to/your/subproject poetry env use ${{ env.pythonLocation }}/bin/python poetry install --no-root
方法2:用Poetry的--directory参数指定项目路径
无需切换目录,直接通过--directory(或简写-C)参数告诉Poetry项目所在位置:
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: 安装Python 3.10.0 uses: actions/setup-python@v4 with: python-version: '3.10.0' - name: 配置Poetry并安装依赖 run: | # 替换为你的子项目实际路径 poetry --directory ./path/to/your/subproject env use ${{ env.pythonLocation }}/bin/python poetry --directory ./path/to/your/subproject install --no-root
额外提示
setup-python会将安装好的Python路径存入pythonLocation环境变量,用这个变量指定Python路径比硬编码更可靠。- 如果你的Monorepo有多个Python子项目,可以为每个子项目单独配置上述步骤,或者使用Poetry的Monorepo插件来统一管理多项目依赖。
内容的提问来源于stack exchange,提问作者Edmondo
相关产品推荐
相关产品推荐

