mirror of
https://github.com/python/cpython.git
synced 2025-08-22 17:55:18 +00:00
bpo-33944: site: Add site-packages tracing in verbose mode (GH-12110)
This commit is contained in:
parent
ddef3bdc7b
commit
2145c8c972
4 changed files with 24 additions and 0 deletions
|
@ -369,6 +369,11 @@ Miscellaneous options
|
||||||
(filename or built-in module) from which it is loaded. When given twice
|
(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
|
(: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.
|
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`.
|
See also :envvar:`PYTHONVERBOSE`.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -88,6 +88,11 @@ USER_SITE = None
|
||||||
USER_BASE = None
|
USER_BASE = None
|
||||||
|
|
||||||
|
|
||||||
|
def _trace(message):
|
||||||
|
if sys.flags.verbose:
|
||||||
|
print(message, file=sys.stderr)
|
||||||
|
|
||||||
|
|
||||||
def makepath(*paths):
|
def makepath(*paths):
|
||||||
dir = os.path.join(*paths)
|
dir = os.path.join(*paths)
|
||||||
try:
|
try:
|
||||||
|
@ -156,6 +161,7 @@ def addpackage(sitedir, name, known_paths):
|
||||||
else:
|
else:
|
||||||
reset = False
|
reset = False
|
||||||
fullname = os.path.join(sitedir, name)
|
fullname = os.path.join(sitedir, name)
|
||||||
|
_trace(f"Processing .pth file: {fullname!r}")
|
||||||
try:
|
try:
|
||||||
f = io.TextIOWrapper(io.open_code(fullname))
|
f = io.TextIOWrapper(io.open_code(fullname))
|
||||||
except OSError:
|
except OSError:
|
||||||
|
@ -190,6 +196,7 @@ def addpackage(sitedir, name, known_paths):
|
||||||
def addsitedir(sitedir, known_paths=None):
|
def addsitedir(sitedir, known_paths=None):
|
||||||
"""Add 'sitedir' argument to sys.path if missing and handle .pth files in
|
"""Add 'sitedir' argument to sys.path if missing and handle .pth files in
|
||||||
'sitedir'"""
|
'sitedir'"""
|
||||||
|
_trace(f"Adding directory: {sitedir!r}")
|
||||||
if known_paths is None:
|
if known_paths is None:
|
||||||
known_paths = _init_pathinfo()
|
known_paths = _init_pathinfo()
|
||||||
reset = True
|
reset = True
|
||||||
|
@ -310,6 +317,7 @@ def addusersitepackages(known_paths):
|
||||||
"""
|
"""
|
||||||
# get the per user site-package path
|
# get the per user site-package path
|
||||||
# this call will also make sure USER_BASE and USER_SITE are set
|
# this call will also make sure USER_BASE and USER_SITE are set
|
||||||
|
_trace("Processing user site-packages")
|
||||||
user_site = getusersitepackages()
|
user_site = getusersitepackages()
|
||||||
|
|
||||||
if ENABLE_USER_SITE and os.path.isdir(user_site):
|
if ENABLE_USER_SITE and os.path.isdir(user_site):
|
||||||
|
@ -354,6 +362,7 @@ def getsitepackages(prefixes=None):
|
||||||
|
|
||||||
def addsitepackages(known_paths, prefixes=None):
|
def addsitepackages(known_paths, prefixes=None):
|
||||||
"""Add site-packages to sys.path"""
|
"""Add site-packages to sys.path"""
|
||||||
|
_trace("Processing global site-packages")
|
||||||
for sitedir in getsitepackages(prefixes):
|
for sitedir in getsitepackages(prefixes):
|
||||||
if os.path.isdir(sitedir):
|
if os.path.isdir(sitedir):
|
||||||
addsitedir(sitedir, known_paths)
|
addsitedir(sitedir, known_paths)
|
||||||
|
|
|
@ -13,6 +13,7 @@ from test.support import (captured_stderr, TESTFN, EnvironmentVarGuard,
|
||||||
import builtins
|
import builtins
|
||||||
import encodings
|
import encodings
|
||||||
import glob
|
import glob
|
||||||
|
import io
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import shutil
|
import shutil
|
||||||
|
@ -320,6 +321,14 @@ class HelperFunctionsTests(unittest.TestCase):
|
||||||
mock_addsitedir.assert_not_called()
|
mock_addsitedir.assert_not_called()
|
||||||
self.assertFalse(known_paths)
|
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):
|
class PthFile(object):
|
||||||
"""Helper class for handling testing of .pth files"""
|
"""Helper class for handling testing of .pth files"""
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Added site.py site-packages tracing in verbose mode.
|
Loading…
Add table
Add a link
Reference in a new issue