# HG changeset patch # User Matt Harbison # Date 2023-02-03 22:31:54 # Node ID afa9d73780e18d34e7e86b2df8082c1fafde75d1 # Parent 562f7da122b590ccd8de10da9b413110975e5a0b run-tests: stop ignoring venv-installed packages This will allow test dependencies to be installed within a venv, instead of tampering with sys/user sites. One thing to note here is that the `VIRTUAL_ENV` path takes precedence over system-site, unlike when run directly with an activated `venv`. For example, `sys.path` as viewed from a feature test in `hghave.py`, when running `hghave vcr` directly with an activated `venv`: sys.path: [ '/home/jenkins/hg-committed/tests', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/home/jenkins/test_venv/lib/python3.8/site-packages' ] vs `sys.path` from the same feature test, when run by `run-tests.py` with this change: sys.path: [ '/home/jenkins/hg-committed/tests', '/home/jenkins/hg-committed', '/home/jenkins/hg-committed/tests', '/home/jenkins/test_venv/lib/python3.8/site-packages', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/home/jenkins/.local/lib/python3.8/site-packages', '/usr/local/lib/python3.8/dist-packages', '/usr/lib/python3/dist-packages' ] diff --git a/tests/run-tests.py b/tests/run-tests.py --- a/tests/run-tests.py +++ b/tests/run-tests.py @@ -3252,6 +3252,18 @@ class TestRunner: # adds an extension to HGRC. Also include run-test.py directory to # import modules like heredoctest. pypath = [self._pythondir, self._testdir, runtestdir] + + # Setting PYTHONPATH with an activated venv causes the modules installed + # in it to be ignored. Therefore, include the related paths in sys.path + # in PYTHONPATH. + virtual_env = osenvironb.get(b"VIRTUAL_ENV") + if virtual_env: + virtual_env = os.path.join(virtual_env, b'') + for p in sys.path: + p = _sys2bytes(p) + if p.startswith(virtual_env): + pypath.append(p) + # We have to augment PYTHONPATH, rather than simply replacing # it, in case external libraries are only available via current # PYTHONPATH. (In particular, the Subversion bindings on OS X