]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-120037: Disable user site packages when a ._pth file is used (GH-137428)
authorSteve Dower <steve.dower@python.org>
Tue, 19 Aug 2025 20:28:28 +0000 (21:28 +0100)
committerGitHub <noreply@github.com>
Tue, 19 Aug 2025 20:28:28 +0000 (21:28 +0100)
Doc/c-api/init_config.rst
Lib/test/test_site.py
Misc/NEWS.d/next/Core_and_Builtins/2025-08-05-20-24-12.gh-issue-120037.MB7MmI.rst [new file with mode: 0644]
Modules/getpath.py

index 24be9ead3874d184771d05805b70f5435d698001..4f0199838e151d5fdb6f780e377f15243e0c78b8 100644 (file)
@@ -2258,6 +2258,7 @@ If a ``._pth`` file is present:
 * Set :c:member:`~PyConfig.isolated` to ``1``.
 * Set :c:member:`~PyConfig.use_environment` to ``0``.
 * Set :c:member:`~PyConfig.site_import` to ``0``.
+* Set :c:member:`~PyConfig.user_site_directory` to ``0`` (since 3.15).
 * Set :c:member:`~PyConfig.safe_path` to ``1``.
 
 If :c:member:`~PyConfig.home` is not set and a ``pyvenv.cfg`` file is present in
@@ -2278,6 +2279,12 @@ The ``__PYVENV_LAUNCHER__`` environment variable is used to set
    therefore affected by :option:`-S`.
 
 
+.. versionchanged:: 3.15
+
+   :c:member:`~PyConfig.user_site_directory` is now set to ``0`` when a
+   ``._pth`` file is present.
+
+
 Py_GetArgcArgv()
 ================
 
index 39c451fbbbba419deb4df0218af0d50afdbf88a9..32fcf3162e8efd9f5f7fa42df8c7508691cb4f04 100644 (file)
@@ -804,6 +804,15 @@ class _pthFileTests(unittest.TestCase):
             )], env=env)
         self.assertTrue(rc, "sys.path is incorrect")
 
+    @support.requires_subprocess()
+    def test_underpth_no_user_site(self):
+        pth_lines = [test.support.STDLIB_DIR, 'import site']
+        exe_file = self._create_underpth_exe(pth_lines)
+        p = subprocess.run([exe_file, '-X', 'utf8', '-c',
+                            'import sys; '
+                            'sys.exit(not sys.flags.no_user_site)'])
+        self.assertEqual(p.returncode, 0, "sys.flags.no_user_site was 0")
+
 
 class CommandLineTests(unittest.TestCase):
     def exists(self, path):
diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2025-08-05-20-24-12.gh-issue-120037.MB7MmI.rst b/Misc/NEWS.d/next/Core_and_Builtins/2025-08-05-20-24-12.gh-issue-120037.MB7MmI.rst
new file mode 100644 (file)
index 0000000..15b8b8f
--- /dev/null
@@ -0,0 +1,2 @@
+Disable user site packages directory when a ``._pth`` file is used, even if
+it contains ``import site``.
index b89d7427e3febdda32e114c7a37756b9f62284dc..ceb605a75c85f44f6e56e8a9f6ad9b3775ae3136 100644 (file)
@@ -790,6 +790,7 @@ if pth:
     config['isolated'] = 1
     config['use_environment'] = 0
     config['site_import'] = 0
+    config['user_site_directory'] = 0
     config['safe_path'] = 1
     pythonpath = []
     for line in pth: