How do I use pytest with virtualenv?
I installed pytest
into a virtual environment (using virtualenv
) and am running it from that virtual environment, but it is not using the packages that I installed in that virtual environment. Instead, it is using the main system packages. (Using python -m unittest discover
, I can actually run my tests with the right python and packages, but I want to use the py.test framework.)
Is it possible that py.test is actually not running the pytest inside the virtual environment and I have to specify which pytest to run?
How to I get py.test to use only the python and packages that are in my virtualenv?
Also, since I have several version of Python on my system, how do I tell which Python that Pytest is using? Will it automatically use the Python within my virtual environment, or do I have to specify somehow?
There is a bit of a dance to get this to work:
- activate your venv :
source venv/bin/activate
- install pytest :
pip install pytest
- re-activate your venv:
deactivate && source venv/bin/activate
The reason is that the path to pytest
is set by the source
ing the activate
file only after pytest
is actually installed in the venv
. You can't set the path to something before it is installed.
Re-activate
ing is required for any console entry points installed within your virtual environment.
Inside your environment, you may try
python -m pytest
In my case I was obliged to leave the venv (deactivate), remove pytest (pip uninstall pytest), enter the venv (source /my/path/to/venv), and then reinstall pytest (pip install pytest). I don't known exacttly why pip refuse to install pytest in venv (it says it already present).
I hope this helps