在GitHub Actions中运行Python Poetry单元测试失败求助
问题原因及解决方案
常见原因
- CI环境未完整安装依赖:本地执行
poetry install会安装所有依赖(包括dev依赖),但如果GitHub Actions里执行了poetry install --no-dev,而dateutil是测试所需的依赖(不管是生产依赖还是dev依赖),就会出现找不到模块的错误。 - Poetry在CI中未正确绑定Python环境:GitHub Actions默认的Python环境可能和Poetry创建的虚拟环境存在版本或路径冲突,导致
poetry run没有正确加载虚拟环境内的依赖包。 - 工作目录不匹配:如果GitHub Actions的工作目录不是项目根目录,
poetry run无法找到pyproject.toml,会直接使用系统Python环境而非Poetry的虚拟环境,自然找不到依赖。
修复步骤
完整安装所有依赖
在GitHub Actions工作流中,执行不带--no-dev参数的poetry install,确保测试所需的所有依赖都被安装:- name: Install dependencies run: poetry install对齐Python版本(可选)
为避免本地与CI环境的Python版本差异导致依赖安装异常,可在工作流中明确指定Python版本,并让Poetry使用该版本:- name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.10" # 替换为你项目使用的Python版本 - name: Install Poetry run: | curl -sSL https://install.python-poetry.org | python3 - echo "$HOME/.local/bin" >> $GITHUB_PATH - name: Install dependencies run: poetry install确保工作目录为项目根
默认情况下actions/checkout会将代码拉取到工作目录,若有切换目录的操作,需切回根目录再执行测试:- name: Run tests run: poetry run python -m unittest discover -s tests/ working-directory: ./ # 显式指定项目根目录,可选验证依赖安装状态
可在CI中添加步骤检查已安装的依赖,确认dateutil是否存在:- name: Check installed packages run: poetry run pip list
内容的提问来源于stack exchange,提问作者pathikrit
相关产品推荐
相关产品推荐

