Pytest和Python 3

64
我已经在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" 的错误提示。

尽管这个问题已经在三年前被提出,而我也很快发布了一个解决方法,但似乎人们仍然在找到它并添加评论。值得一提的是,Debian和pytest已经更新,所以现在安装了python-pytestpython3-pytest后,我长时间以来一直在运行py.testpy.test-3来选择其中之一,因此也不需要解决方法了。 - Joe Abbate
6个回答

72

我找到了一个解决方法:

  1. 使用aptitude安装python3-pip,这将创建/usr/bin/pip-3.2
  2. 接下来运行pip-3.2 install pytest,这会在python3.2路径下重新安装pytest。
  3. 然后我可以使用python3 -m pytest somedir/sometest.py

虽然不如直接运行py.test方便,但这是可行的。


作为临时解决方案,您可以将py.test-3.x中的shebang行替换为指向您的python3解释器。对我有用。 - Goncalo
2
你可以使用 python3 -m pytest(不需要路径)来自动发现测试,至少在3.5版本中可行。 - Mark
8
为了避免这种冲突,当使用Python 3安装py.test时,py.test应该明确地作为py.test3py3.test进行安装。但它没有这样做。可以说,这构成了一个错误。在此问题得到解决之前,请考虑为方便起见,在上述步骤中添加第四个步骤:4. 将以下py.test3 shell别名添加到您的~/.bashrc~/.zshrc启动脚本中:alias py.test3='python3 -m pytest' 完成。 - Cecil Curry
Goncalo,Mark,Cecil,谢谢。我应该指出,相当长一段时间以来,我一直在使用Debian软件包python3-pytest,它安装了脚本py.test-3(在Python 3.5下还安装了py.test-3-5),所以这不再是一个问题。 - Joe Abbate

28

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

如果不能这样做,请尝试以下操作:

  1. 安装virtualenv
  2. 为Python3创建虚拟环境
    • virtualenv --python=python3 env_name
  3. 激活虚拟环境
    • source ./env_name/bin/activate
  4. 安装py.test
    • pip install py.test
  5. 现在使用此虚拟环境尝试运行您的测试

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

9
这对我有用:

这对我有用:

python3 $(which py.test) ...

很好,这解决了我在虚拟环境中安装python3和pytest后出现的six问题(six.PY3为False)。 - Mahé
事实上,上述问题已通过 hash -r 解决。@Joe Abbate 的回答是适当的答案。 - Mahé

5
除了前面提到的 python3 -m pytest,这个方法也可能有效:
env pytest

这对我有效,使用虚拟环境 pytest 吧? - AdityaKapreShrewsburyBoston

4

使用pip3进行安装: pip3 install -U pytest


1
已经有7年前的2个答案基本上给出了相同的答案。请不要重复现有的答案。 - Mark Rotteveel
1
请原谅,我没有看到它们。 - mjakic
1
https://dev59.com/CWYq5IYBdhLWcg3wkRi_#14371623这是一个使用Java的示例,用于将字符串转换为日期格式。它使用SimpleDateFormat类来解析字符串并返回Date对象。https://dev59.com/CWYq5IYBdhLWcg3wkRi_#14371849这是一个使用Java的示例,用于将日期格式化为字符串。它使用SimpleDateFormat类来格式化日期并返回字符串。 - Mark Rotteveel

1
Debian Linux提供python3-pytest软件包,如果已安装,您可以简单地运行以下命令:
/usr/bin/pytest-3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接