对于我的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
)。