如何将 pytest 与 virtualenv 一起使用?

Posted

技术标签:

【中文标题】如何将 pytest 与 virtualenv 一起使用?【英文标题】:How do I use pytest with virtualenv? 【发布时间】:2016-05-04 20:35:02 【问题描述】:

我将pytest 安装到虚拟环境中(使用virtualenv)并在该虚拟环境中运行它,但它没有使用我在该虚拟环境中安装的软件包。相反,它使用的是主系统包。 (使用python -m unittest discover,我实际上可以使用正确的python 和包运行我的测试,但我想使用py.test 框架。)

是否可能 py.test 实际上并没有在虚拟环境中运行 pytest,我必须指定要运行哪个 pytest?

如何让 py.test 仅使用我的 virtualenv 中的 python 和包?

另外,由于我的系统上有多个版本的 Python,我如何判断 Pytest 使用的是哪个 Python?它会在我的虚拟环境中自动使用 Python,还是我必须以某种方式指定?

【问题讨论】:

在安装和运行pytest之前你真的激活了你创建的virtualenv吗?即source venv/bin/activate 当然。我使用 virtualenvwrapper 并且当前激活的 virtualenv 在它被激活时显示在我的提示符上。另外,我可以使用 pip freeze 查看当前 virtualenv 安装的包。 我得到了这个工作。它只需要重新启动终端。 【参考方案1】:

要让它发挥作用,需要花点功夫:

    激活你的venv:source venv/bin/activate 安装 pytest:pip install pytest 重新激活你的venv:deactivate && source venv/bin/activate

原因是pytest的路径是由sourceactivate文件中设置的,只有在pytest实际安装在venv中之后。您不能在安装之前设置路径。

虚拟环境中安装的任何控制台入口点都需要 Re-activateing。

【讨论】:

同样的想法也适用于 anaconda 环境 第三步也可以是hash -r 你是我的英雄。对于那些使用诗歌的人,我必须运行 poetry run pip install pytest 然后 poetry run pytest 才能工作。【参考方案2】:

在你的环境中,你可以试试

python -m pytest

【讨论】:

【参考方案3】:

在我的情况下,我不得不离开 venv(停用),删除 pytest(pip 卸载 pytest),输入 venv(源 /my/path/to/venv),然后重新安装 pytest(pip install pytest)。我不知道为什么 pip 拒绝在 venv 中安装 pytest(它说它已经存在)。

希望对你有帮助

【讨论】:

我的基础环境中有 pytest,但我的 venv 中没有,所以当我在 venv 中调用 py.test -v 时,它使用的是 pytest outside venv 并没有找到我的包。无论如何,只需激活 venv 然后执行 conda install pytest 对我有用。 (我认为 pip 也可以。) 在我看来,您在 global 和 venv 中都安装了 pytest,但您的终端中尚未更新 pytest 的路径。我认为删除 global 是没有必要的。你只需要在pytest 安装到venv 之后重新source 激活脚本(见我的回答)。【参考方案4】:

每次你想运行你的python脚本时,你都必须激活你的python env,你有几种方法来激活它,我们假设你的virtualenv安装在/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 环境

【讨论】:

我每次运行任何脚本时都会激活我的环境,并在完成后停用它。 我的活动 virtualenv 是我提示的一部分。我让 py.test 通过重新启动终端来使用我的 virtualenv。

以上是关于如何将 pytest 与 virtualenv 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

Virtualenv 与 Eclipse(伽利略)[关闭]

pytest default config.option

如何在pytest中打印到控制台?

如何复制virtualenv

浅谈pytest+HttpRunner如何展开接口测试

如何查看在 Django 的 manage.py test 命令期间运行了哪些测试