'pytest --version'工作,但 Github 操作中的 Bash 无法识别'pytest tests'命令



对于我的Python包' impp ',我正在通过'Github Actions'在虚拟环境中使用'poetry'和pytest进行构建和测试。我已经让Github Actions脚本工作成功,直到最后一步,当我使用pytest运行测试时。

奇怪的是,'pytest——version'命令工作得很好,打印'pytest 7.2.2'。但是,'pytest tests'返回错误,'pytest: command not found'。

根据Substack上其他线程的建议,我也尝试过:

py.test tests
py.test: command not found
python -m pytest tests
No module named pytest
py -m pytest tests
No module named pytest
python3 -m pytest tests
No module named pytest

下面是我的Github Actions脚本:

name: build-test
on:
push:
branches: [main, master]
pull_request:
branches: [main, master]
jobs:
build:
strategy:
fail-fast: false
matrix:
python-version: ["3.11"]
poetry-version: [latest]
os: [windows-latest]
defaults:
run:
shell: bash
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install and configure Poetry
uses: snok/install-poetry@v1
- name: Configure Poetry
run: |
poetry config virtualenvs.in-project true
- name: Install project
run: |
poetry install --no-interaction
- name: Activate venv windows
run: |
source .venv/scripts/activate
pytest --version
if: runner.os == 'Windows'
- name: Activate venv other
run: |
source .venv/bin/activate
pytest --version
if: runner.os != 'Windows'
- name: Run tests
run: |
python3 -m pytest tests/

请注意,据我所知,这个问题不是重复的。大多数类似的线程都涉及'pytest——version'失败,但该命令在本例中正常工作。

工作流日志:https://github.com/chriscarrollsmith/imfp/actions/workflows/actions.yml

根据jobs.<job_id>.steps[*].run:

每个run关键字代表一个新的进程和shell。

因此,在上一步中激活的venv在下一步中不会保持激活状态。

您需要在运行测试之前再次激活它。

并不总是需要激活虚拟环境。也可以直接调用虚拟环境的二进制目录中的二进制文件(Windows上的Scripts和其他任何地方的bin)。例如:.venv/Scripts/python -m pytest.

或者,既然使用了诗歌,也可以调用poetry run python -m pytest(这可能是最好的解决方案,只要使用诗歌,就坚持使用poetry run)。

相关内容

  • 没有找到相关文章

最新更新