pytest-dev / pytest

The pytest framework makes it easy to write small tests, yet scales to support complex functional testing
https://pytest.org
MIT License
11.64k stars 2.58k forks source link

pytest ignores `-P` (avoid prepend) argument provided to Python #12546

Open Andrej730 opened 6 days ago

Andrej730 commented 6 days ago

Python 3.11, Windows 11, pytest==8.2.2

  1. Create new_test.py in your current folder.
    import sys
    print(sys.path)
  2. Run py -P -m pytest new_test.py --capture=no
    C:\numpy> py -P -m pytest new_test.py --capture=no
    =============================================================================================================== test session starts ===============================================================================================================
    platform win32 -- Python 3.11.7, pytest-8.2.2, pluggy-1.5.0
    rootdir: C:\\numpy
    configfile: pytest.ini
    collecting ... ['C:\numpy', 'C:\numpy\\build-install\\usr\\Lib\\site-packages', 'Python311\\python311.zip', 'Python311\\DLLs', 'Python311\\Lib', 'Python311', 'Python311\\Lib\\site-packages', 'Python311\\Lib\\site-packages\\win32', 'Python311\\Lib\\site-packages\\win32\\lib', 'Python311\\Lib\\site-packages\\Pythonwin']
    collected 0 items
  3. As you can notice C:\numpy is present in sys.path now, therefore import numpy will import numpy not from C:\numpy\\build-install\\usr\\Lib\\site-packages as it's set by PYTHONPATH environment variable but from C:\numpy which is not intended since -P is provided: https://github.com/numpy/numpy/issues/26816

Example of how -P option usually works

py -P new_test.py   
['C:\numpy\\build-install\\usr\\Lib\\site-packages', 'Python311\\python311.zip', 'Python311\\DLLs', 'Python311\\Lib', 'Python311', 'Python311\\Lib\\site-packages', 'Python311\\Lib\\site-packages\\win32', 'Python311\\Lib\\site-packages\\win32\\lib', 'Python311\\Lib\\site-packages\\Pythonwin']
RonnyPfannschmidt commented 6 days ago

The pytest import mode is independent from python and configured with a different option

In general its recommended to use the pytest - command to avoid python adding cwd to sys.path

Andrej730 commented 6 days ago

The pytest import mode is independent from python and configured with a different option In general its recommended to use the pytest - command to avoid python adding cwd to sys.path

What would be the recommended way to avoid pytest adding cwd to sys.path?

RonnyPfannschmidt commented 5 days ago

See the pytest docs on import modes