如何在virtualenv中使用pytest?

88

我已经使用virtualenv创建了虚拟环境,并在其中安装了pytest,并且从该虚拟环境中运行它,但它没有使用我在虚拟环境中安装的包。相反,它使用的是主系统的包。(使用 python -m unittest discover,我可以使用正确的Python和包运行我的测试,但我想使用 Pytest 框架。)

可能 py.test 实际上没有在虚拟环境内运行 pytest,我需要指定要运行哪个 pytest 吗?

怎样才能让 py.test 只使用我虚拟环境中的 Python 和包呢?

另外,由于我系统上安装了多个版本的 Python,我该如何确定 Pytest 正在使用哪个 Python?它会自动使用虚拟环境中的 Python 吗,还是我需要进行某种指定?


1
你在安装和运行pytest之前,是否确实激活了你创建的虚拟环境?即执行source venv/bin/activate命令。 - Filip Jukić
1
当然。我使用virtualenvwrapper,当前激活的虚拟环境在激活时会显示在我的提示符上。此外,我可以使用pip freeze查看当前虚拟环境中安装的软件包。 - Henry Grantham
8
我已让它运行起来了,只需要重新启动终端即可。 - Henry Grantham
5个回答

130

这里有一些步骤需要遵循才能使其正常工作:

  1. 激活您的虚拟环境: source venv/bin/activate
  2. 安装pytest: pip install pytest
  3. 重新激活您的虚拟环境: deactivate && source venv/bin/activate

原因是只有在venv中实际安装了pytest后,才能通过source activate文件来设置pytest的路径。 在安装之前无法将路径设置为其他内容。

重新激活对于在您的虚拟环境中安装的任何控制台入口点都是必需的。


1
同样的想法也适用于Anaconda环境。 - mikehwang
4
第三步也可以是hash -r - anthony sottile
1
你是我的英雄。对于那些使用诗歌的人,我必须运行 poetry run pip install pytest 然后 poetry run pytest 才能正常工作。 - Lo-Tan
1
在安装前,您无法设置路径到某个东西。我认为venv的激活会使用整个venv的bin目录而不是精确的二进制文件,因此我几乎无法理解为什么需要重新激活,尽管我知道在上述情况下确实需要这样做。 - Alexander Ites
1
这样的副作用在使用pytest时确实令人困扰。 - Kwame
显示剩余2条评论

83

在您的环境中,您可以尝试

python -m pytest

3
在我的情况下,我被迫离开 venv(deactivate),删除 pytest(pip uninstall pytest),进入 venv(source /my/path/to/venv),然后重新安装 pytest(pip install pytest)。我不知道为什么 pip 拒绝在 venv 中安装 pytest(它说已经存在)。希望这可以帮助您。

我在我的基本环境中安装了pytest,但在我的虚拟环境中没有安装。因此,当我在虚拟环境中调用py.test -v时,它使用的是venv之外的pytest,并且找不到我的软件包。无论如何,只需激活venv,然后执行conda install pytest即可解决问题。(我认为pip也可以。) - seth127
1
听起来你在全局和虚拟环境中都安装了 pytest,但是终端中的 pytest 路径没有被更新。我认为删除全局安装并不是必要的;你只需要在 venv 中安装完 pytest 后重新运行激活脚本即可(请参考我的回答)。 - 7yl4r

0
如果你在Debian(或Ubuntu)系统的Python虚拟环境中运行pytest时遇到问题,可能是因为系统的全局pytest版本与你的虚拟环境发生了冲突。这可能是因为系统的pytest版本使用了全局的Python解释器,而该解释器无法访问你的虚拟环境中安装的Python包。你可以通过以下方式删除该版本的pytest:
sudo apt remove python3-pytest

然后激活您的虚拟环境,并在其中安装pytest。
pip intall pytest

这样pytest就能够加载安装在虚拟环境中的Python包。

0

每次运行Python脚本时,您都必须激活Python环境,有几种方法可以激活它,我们假设您的虚拟环境安装在/home/venv下:

1- 基本方法是使用一条命令行运行Python >>> /home/venv/bin/python <your python file.py>

2- 在Python脚本文件的顶部添加此行 #! /home/venv/bin/python 然后运行 python <you python file.py>

3- 激活您的Python环境 source /home/venv/bin/activate 然后像这样运行您的脚本 python <you python file.py>

4- 使用virtualenvwrapper来管理和激活您的Python环境


每次我运行任何来自该环境的脚本时,我都会确保始终激活它,并在完成后停用它。 - Henry Grantham
1
我的活动虚拟环境是我的提示符的一部分。我通过重新启动终端,让py.test使用我的虚拟环境。 - Henry Grantham

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