【问题标题】:How do I use pytest with virtualenv?如何将 pytest 与 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 安装的包。
  • 我得到了这个工作。它只需要重新启动终端。

标签: python virtualenv pytest


【解决方案1】:

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

  1. 激活你的venv:source venv/bin/activate
  2. 安装 pytest:pip install pytest
  3. 重新激活你的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。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-07
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    相关资源
    最近更新 更多