I've installed pyenv and have different versions of python installed with it:
$ pyenv versions system 2.7.1 3.2.5 3.5.0 3.5.1 * 3.5.2 I use the following command to switch to python 3.5.2:
pyenv shell 3.5.2
And when I check the python version this is what I get:
$ python --version Python 3.5.2 But when I run pytest, it still runs under python 2.7.6:
pytest -v
==================================================================== test session starts ====================================================================
platform linux2 -- Python 2.7.6, pytest-3.0.3, py-1.4.31, pluggy-0.4.0 -- /usr/bin/python
Why is pytest running under the older version?
pytest requires: Python 3.7+ or PyPy3.
As most Python packages, pytest is available on PyPI. You can install it in a virtual environment using pip : Windows. Linux + macOS.
Bottom line: run
python -m pytest, orpy.test-<version> if your alternative Python and pytest are installed with system package manager, orpyenv, switch with pyenv to that version and make sure you have pytest installed for it. Then you can just run pytest. pip executable is also among the ones being switched, you need to switch to the alternative Python before installing pytest for it, too.As I can see, /usr/bin/pytest (that belongs to the system package manager's python-pytest package) has a shebang !#/usr/bin/python since it corresponds to the system python's installation.
pyenv, as its README.md says, does not replace /usr/bin/python - because it indeed should not be replaced to avoid breaking system packages.
Instead, it adds its directory to PATH and inserts a launcher there (called "shim") which is what gets invoked when you type "python". As you probably guessed, this hack is ignored by a shebang like the above - as it should.
python -m pytest will make whichever python that launches itself use the package from its installation.pytest for your other Python version may include versioned executables on the PATH named py.test-<version> (e.g. py.test-3 or py.test-3.6) depending on the way you installed it. python36-pytest - this is virtually guaranteed.pip, it only creates an unversioned executable (though you can create a versioned one yourself). Moreover, if you install the same package for a different Python version but with the same --prefix, it will overwrite the existing one's executable!pyenv's suggested way seems to be to install all python versions of interest and packages for them under ~/.pyenv/versions. /usr/local can be used for it.pip!) that are currently installed for that version, so invoking those scripts without a path would run those shims. /usr/local with just the result you're seeing now.I search the Internet and find the related question. That guy works around with the following way:
python -m pytest tests/my_test.py Please tell me if that works or not :)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With