Mercurial > hg
changeset 49976:afa9d73780e1
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'
]
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Fri, 03 Feb 2023 17:31:54 -0500 |
parents | 562f7da122b5 |
children | e43f91244de2 |
files | tests/run-tests.py |
diffstat | 1 files changed, 12 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/tests/run-tests.py Mon Jan 30 16:59:15 2023 -0500 +++ b/tests/run-tests.py Fri Feb 03 17:31:54 2023 -0500 @@ -3252,6 +3252,18 @@ # 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