Skip to content

Commit e686737

Browse files
committed
Fix site.getsitepackages() broken on python2 on debian
1 parent 45b44c2 commit e686737

File tree

3 files changed

+34
-0
lines changed

3 files changed

+34
-0
lines changed

docs/changelog/2105.bugfix.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix ``site.getsitepackages()`` broken on python2 on debian - by :user:`freundTech`.

src/virtualenv/create/via_global_ref/builtin/python2/site.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ def main():
1919
load_host_site()
2020
if global_site_package_enabled:
2121
add_global_site_package()
22+
rewrite_getsitepackages()
2223

2324

2425
def load_host_site():
@@ -161,4 +162,22 @@ def add_global_site_package():
161162
site.PREFIXES = orig_prefixes
162163

163164

165+
# Debian and it's derivatives patch this function. We undo the damage
166+
def rewrite_getsitepackages():
167+
site = sys.modules["site"]
168+
169+
orig_getsitepackages = site.getsitepackages
170+
171+
def getsitepackages():
172+
sitepackages = orig_getsitepackages()
173+
for prefix in (sys.prefix, sys.exec_prefix):
174+
path = os.path.join(prefix, "lib", "python" + sys.version[:3], "site-packages")
175+
if path not in sitepackages:
176+
sitepackages.insert(0, path)
177+
178+
return sitepackages
179+
180+
site.getsitepackages = getsitepackages
181+
182+
164183
main()

tests/unit/create/test_creator.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from __future__ import absolute_import, unicode_literals
22

3+
import ast
34
import difflib
45
import gc
56
import json
@@ -621,3 +622,16 @@ def test_pth_in_site_vs_PYTHONPATH(tmp_path):
621622
env=env,
622623
)
623624
assert out == "ok\n"
625+
626+
627+
def test_getsitepackages(tmp_path):
628+
session = cli_run([ensure_text(str(tmp_path))])
629+
env_site_packages = [str(session.creator.purelib), str(session.creator.platlib)]
630+
out = subprocess.check_output(
631+
[str(session.creator.exe), "-c", r"import site; print(site.getsitepackages())"],
632+
universal_newlines=True,
633+
)
634+
site_packages = ast.literal_eval(out)
635+
636+
for env_site_package in env_site_packages:
637+
assert env_site_package in site_packages

0 commit comments

Comments
 (0)