在我的旧虚拟环境中,我可以直接执行
pytest tests/unit/
命令。然后不知怎么的,我的环境出了问题,我不得不删除并重新安装.venv
。接着,在激活新的.venv
并重新安装所有包之后,我尝试执行pytest tests/unit/
命令,但是它会出现以下错误:(.venv) john@MacBook-Pro:~/myproject$ pytest tests/unit/nti/ -p no:warnings
-bash: /usr/local/bin/pytest: /usr/local/opt/python/bin/python3.6: bad interpreter: No such file or directory
在经历了一些痛苦的尝试后,我发现可以通过以下方式运行测试:
(.venv) john@MacBook-Pro:~/myproject$ python -m pytest tests/unit/nti/ -p no:warnings
那么,python -m pytest
与pytest
之间有什么区别呢?为什么pytest
无法工作,但python -m pytest
却可以正常运行?
pytest
尝试将模块作为脚本本身运行,使用顶部的 shebang(!#...
行)来决定使用哪个解释器。python -mpytest
仅使用python
运行模块,忽略 shebang。问题似乎是您的计算机上不再存在/usr/local/opt/python/bin/python3.6
。 - chepnerwhich python
和which pytest
都指向项目venv文件夹内的二进制文件。对于python -m pytest
,PATH
包含来自项目目录的模块,但是只有纯粹的pytest
失败,因为它们不在PATH
上。 - Tobias Feil