【问题标题】:pytest or py.test, and inconsistent documentationpytest 或 py.test,以及不一致的文档
【发布时间】:2018-10-18 14:46:18
【问题描述】:

我决定试一试。

Virtualenv 已启动(python 3.5.2)pip install -U pytest(根据:https://docs.pytest.org/en/latest/getting-started.html)。

下一个文档说我应该运行:

$ pytest --version
This is pytest version 3.x.y, imported from $PYTHON_PREFIX/lib/python3.6/site-packages/pytest.py

但这实际上是我得到的:

$ pytest --version
Usage: pytest [OPTIONS] [testfile [testpattern]]

examples:

pytest path/to/mytests.py
pytest path/to/mytests.py TheseTests
pytest path/to/mytests.py TheseTests.test_thisone
pytest path/to/mytests.py -m '(not long and database) or regr'

pytest one (will run both test_thisone and test_thatone)
pytest path/to/mytests.py -s not (will skip test_notthisone)


pytest: error: no such option: --version

但如果我跑:

py.test --version
This is pytest version 3.9.1, imported from ${HOME}/${V_ENV}/lib/python3.5/site-packages/pytest.py

根据那个答案:

"py.test" vs "pytest" command

py.test 是旧的(他们说deprecated),pytest 是要走的路。

我检查了他们两个:

$ which pytest
$HOME/$V_ENV/bin/pytest

$ which py.test
$HOME/$V_ENV/bin/py.test

完全相同的文件。

$HOME 是我的家,但 $V_ENV 是我保存 virutalenvs 的地方(我使用 virtualenvwrapper)。

运行测试时:

有效:

$ py.test tests/

它没有(例外):

$ pytest tests/

我检查了堆栈跟踪。

py.test 使用 python3 运行(正确) pytest 使用 python2 运行(不正确,来自 os)

有人知道怎么回事吗?

而且看起来 py.test 和 pytest 是完全一样的,所以这个不使用 py.test 的概念似乎有点过时了。我这样说对吗?

【问题讨论】:

  • py.test 是旧名称,其中pytest 是名为py 的大型包的一部分(不再开发)。一旦他们转移到一个单独的包,他们将名称更改为pytest。命令py.test 已弃用,最终将被删除。我猜你的问题是由于 pytest 的错误安装造成的,大概是因为你在虚拟环境中安装时使用了 --user。创建一个新的虚拟环境并从头开始重新安装:/path/to/venv/bin/pip install pytest,问题是否仍然出现?
  • 这不是 --user 开关,但您的建议是正确的。我从头开始,发现它正在工作。下一个罪魁祸首是已安装库的列表,我检查了它们,发现你提到的py。我检查了它作为依赖项安装的内容,它是一个名为 tox 的库。建议与 pytest 本身配合得很好的图书馆,互联网上说 go pytest with tox。这将节省您的时间和精力。所以现在是另一个练习,如何处理 tox 以便它不会安装 py。 :-D 干杯!

标签: python pytest


【解决方案1】:

碰巧 py 安装在系统 python 库中(可能是另一个依赖项)。有一种一致的方法可以重现该错误。它涉及以下步骤。

  1. 创建虚拟环境
  2. 运行pytest --version(它会抱怨pytest没有--version)
  3. 点安装 pytest
  4. 运行 pytest --version(它会抱怨 pytest 没有 --version)

它将保持这种状态。但是,如果您停用并激活 env 或 彻底关闭外壳并重新打开它,它会修复它。

=== 老安维尔 ===

感谢@hoefling,他为我指明了正确的方向!

有一个名为 py 的旧库作为 tox 的依赖项安装。看起来在与安装和/或运行这两个库相关的某些情况下,您最终可能会损坏安装。最初我认为这是完全的安装顺序(先安装 tox,然后再安装 pytest),但我无法重现。所以目前的工作理论是我首先运行 tox 导致它创建无效的 virtualenv 然后我安装了损坏的 PYTHONPATH 或 PATH 的 pytest。

简而言之。有一种方法可以破坏你的 pytest,如果它发生从头开始人们!

【讨论】:

  • 从您提到的重现步骤来看,您的设置似乎存在一些问题; virtualenv 不应该干扰系统 python。它可能从 .bashrc 某处修改的 PYTHONPATH env var 到修改后的 virtualenv.py 模块。这是您必须解决的主要问题,因为其他软件包也可能发生错误。
猜你喜欢
  • 2017-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多