summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornative-api <vano@mail.mipt.ru>2020-06-12 06:20:11 (GMT)
committerGitHub <noreply@github.com>2020-06-12 06:20:11 (GMT)
commit2145c8c9724287a310bc77a2760d4f1c0ca9eb0c (patch)
tree754c3c52598209ebfd547710d0736e2ac01351ac
parentddef3bdc7b254a7e1129a52c17d79cb7c73a88f5 (diff)
downloadcpython-2145c8c9724287a310bc77a2760d4f1c0ca9eb0c.zip
cpython-2145c8c9724287a310bc77a2760d4f1c0ca9eb0c.tar.gz
cpython-2145c8c9724287a310bc77a2760d4f1c0ca9eb0c.tar.bz2
bpo-33944: site: Add site-packages tracing in verbose mode (GH-12110)
-rw-r--r--Doc/using/cmdline.rst5
-rw-r--r--Lib/site.py9
-rw-r--r--Lib/test/test_site.py9
-rw-r--r--Misc/NEWS.d/next/Library/2019-03-01-01-56-23.bpo-33944.-82Pkt.rst1
4 files changed, 24 insertions, 0 deletions
diff --git a/Doc/using/cmdline.rst b/Doc/using/cmdline.rst
index 7aacd8f..8c65d99 100644
--- a/Doc/using/cmdline.rst
+++ b/Doc/using/cmdline.rst
@@ -369,6 +369,11 @@ Miscellaneous options
(filename or built-in module) from which it is loaded. When given twice
(:option:`!-vv`), print a message for each file that is checked for when
searching for a module. Also provides information on module cleanup at exit.
+
+ .. versionchanged:: 3.10
+ The :mod:`site` module reports the site-specific paths
+ and :file:`.pth` files being processed.
+
See also :envvar:`PYTHONVERBOSE`.
diff --git a/Lib/site.py b/Lib/site.py
index e981a14..544306c 100644
--- a/Lib/site.py
+++ b/Lib/site.py
@@ -88,6 +88,11 @@ USER_SITE = None
USER_BASE = None
+def _trace(message):
+ if sys.flags.verbose:
+ print(message, file=sys.stderr)
+
+
def makepath(*paths):
dir = os.path.join(*paths)
try:
@@ -156,6 +161,7 @@ def addpackage(sitedir, name, known_paths):
else:
reset = False
fullname = os.path.join(sitedir, name)
+ _trace(f"Processing .pth file: {fullname!r}")
try:
f = io.TextIOWrapper(io.open_code(fullname))
except OSError:
@@ -190,6 +196,7 @@ def addpackage(sitedir, name, known_paths):
def addsitedir(sitedir, known_paths=None):
"""Add 'sitedir' argument to sys.path if missing and handle .pth files in
'sitedir'"""
+ _trace(f"Adding directory: {sitedir!r}")
if known_paths is None:
known_paths = _init_pathinfo()
reset = True
@@ -310,6 +317,7 @@ def addusersitepackages(known_paths):
"""
# get the per user site-package path
# this call will also make sure USER_BASE and USER_SITE are set
+ _trace("Processing user site-packages")
user_site = getusersitepackages()
if ENABLE_USER_SITE and os.path.isdir(user_site):
@@ -354,6 +362,7 @@ def getsitepackages(prefixes=None):
def addsitepackages(known_paths, prefixes=None):
"""Add site-packages to sys.path"""
+ _trace("Processing global site-packages")
for sitedir in getsitepackages(prefixes):
if os.path.isdir(sitedir):
addsitedir(sitedir, known_paths)
diff --git a/Lib/test/test_site.py b/Lib/test/test_site.py
index 957e7a4..9f4a8bc 100644
--- a/Lib/test/test_site.py
+++ b/Lib/test/test_site.py
@@ -13,6 +13,7 @@ from test.support import (captured_stderr, TESTFN, EnvironmentVarGuard,
import builtins
import encodings
import glob
+import io
import os
import re
import shutil
@@ -320,6 +321,14 @@ class HelperFunctionsTests(unittest.TestCase):
mock_addsitedir.assert_not_called()
self.assertFalse(known_paths)
+ def test_trace(self):
+ message = "bla-bla-bla"
+ for verbose, out in (True, message + "\n"), (False, ""):
+ with mock.patch('sys.flags', mock.Mock(verbose=verbose)), \
+ mock.patch('sys.stderr', io.StringIO()):
+ site._trace(message)
+ self.assertEqual(sys.stderr.getvalue(), out)
+
class PthFile(object):
"""Helper class for handling testing of .pth files"""
diff --git a/Misc/NEWS.d/next/Library/2019-03-01-01-56-23.bpo-33944.-82Pkt.rst b/Misc/NEWS.d/next/Library/2019-03-01-01-56-23.bpo-33944.-82Pkt.rst
new file mode 100644
index 0000000..b0c953d
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-03-01-01-56-23.bpo-33944.-82Pkt.rst
@@ -0,0 +1 @@
+Added site.py site-packages tracing in verbose mode.