Pytest 和 Python 3

Posted

技术标签:

【中文标题】Pytest 和 Python 3【英文标题】:Pytest and Python 3 【发布时间】:2012-12-31 12:35:03 【问题描述】:

我已经在 Debian Linux 下安装了 pytest 2.3.4。默认情况下它在 Python 2.7 下运行,但有时我想在 Python 3.x 下运行它,它也已安装。我似乎找不到任何有关如何执行此操作的说明。

PyPI Trove 分类器显示 Python :: 3,因此推测它一定是可能的。除了py.test somedir/sometest.py,我可以使用python -m pytest ...,甚至python2.7 -m pytest ...,但如果我尝试python3 -m pytest ...,我会得到

/usr/bin/python3: No module named pytest

【问题讨论】:

尽管三年多前有人问过这个问题并且我在此后不久发布了一个解决方法,但似乎人们一直在寻找它并添加 cmets。作为记录,Debian 和 pytest 已经继续前进,所以现在安装了 python-pytestpython3-pytest,很长一段时间以来,我一直在运行 py.testpy.test-3 以从中选择一个,所以有也不需要解决方法。 【参考方案1】:

用 pip3 安装它: pip3 install -U pytest

【讨论】:

7 年前已经有 2 个答案给出了基本相同的答案。请不要重复已有的答案。 请原谅,我没看到他们。 ***.com/a/14371623/466862 和 ***.com/a/14371849/466862【参考方案2】:

Debian Linux 有 python3-pytest 包,如果安装了,你可以简单地运行:

/usr/bin/pytest-3

【讨论】:

【参考方案3】:

除了前面提到的python3 -m pytest,这也可能有效:

env pytest

【讨论】:

这对我有用,我猜是使用虚拟环境 pytest?【参考方案4】:

这对我有用:

python3 $(which py.test) ...

【讨论】:

很好,这解决了我在使用six 时遇到的问题(six.PY3 是 False),尽管 pytest 使用 python3 安装在虚拟环境中。 其实上面提到的问题已经被hash -r解决了。 @Joe Abbate 的答案是合适的答案。【参考方案5】:

我找到了解决方法:

    使用 aptitude 安装了python3-pip,它创建了/usr/bin/pip-3.2。 下一个 pip-3.2 install pytest 重新安装了 pytest,但在 python3.2 路径下。 然后我就可以使用python3 -m pytest somedir/sometest.py

不如直接运行py.test方便,但可行。

【讨论】:

作为临时解决方法,您可以替换 py.test-3.x 中的 shebang 行以指向您的 python3 解释器。为我工作。 至少在 3.5 中,您可以仅使用 python3 -m pytest(无路径)自动发现测试。 为了避免这种冲突,py.test 应该一定在 Python 3 下安装时将自身安装为 py.test3py3.test。它不会。可以说,这构成了一个错误。在解决此问题之前,为方便起见,请考虑在上述列表中添加第四步:4。将以下 py.test3 shell 别名添加到您的 ~/.bashrc~/.zshrc 启动脚本: alias py.test3='python3 -m pytest' 完成。 贡卡洛、马克、塞西尔,谢谢。我应该指出,很长一段时间以来,我一直在使用 Debian 软件包 python3-pytest,它安装了脚本 py.test-3(以及 Python 3.5 下的 py.test-3-5),所以这不再是问题。【参考方案6】:

python3 没有安装模块 py.test。如果可以,请安装 python3-pytest 包。

如果你不能这样做,试试这个:

    安装 virtualenv 为 python3 创建一个 virtualenv virtualenv --python=python3 env_name 激活虚拟环境 source ./env_name/bin/activate 安装 py.test pip install py.test 现在使用这个 virtualenv 尝试运行你的测试

【讨论】:

在 Debian (Wheezy) 中,python3-pytest(和 python-pytest)的版本是 2.2.4,这就是我使用 pip 安装 pytest 2.3.4 的原因。我也在使用 tox,所以我已经有一个 py32 tox virtualenv。但是,有时直接使用 python3 或 python3.2 或 python3.3 调用测试很方便。目前,我所有的测试都是 unittest,所以我可以很容易地调用它们,例如,python3 -m unittest discover ...python3.3 tests/sometest.py,但似乎我无法用 pytest 做类似的事情。 由于我不熟悉的原因,在虚拟环境之间切换可能需要用hash -r刷新PATH。

以上是关于Pytest 和 Python 3的主要内容,如果未能解决你的问题,请参考以下文章

pytest学习和使用10-Pytest中的测试用例如何跳过执行?

python:sys.argv[]用法

Python - pytest

python使用pytest+pytest报告

python - pytest

Pytest 和 Python 3