如何将 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
的路径是由source
在activate
文件中设置的,只有在pytest
实际安装在venv
中之后。您不能在安装之前设置路径。
虚拟环境中安装的任何控制台入口点都需要 Re-activate
ing。
【讨论】:
同样的想法也适用于 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 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章