aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/tools/python3/Lib/site.py
diff options
context:
space:
mode:
authorrobot-contrib <robot-contrib@yandex-team.com>2024-07-02 22:47:57 +0300
committerrobot-contrib <robot-contrib@yandex-team.com>2024-07-02 22:59:47 +0300
commit96b239778766d32d5158aca805e08199b3c0a743 (patch)
treea9c8679261a62138ec4735d878a11f6478cd196a /contrib/tools/python3/Lib/site.py
parent292e7317266c2136a1e1bd027e16e6eefb639028 (diff)
downloadydb-96b239778766d32d5158aca805e08199b3c0a743.tar.gz
Update contrib/tools/python3 to 3.12.4
6e8edffbef193b35b45ddccdc3beda6bb2627186
Diffstat (limited to 'contrib/tools/python3/Lib/site.py')
-rw-r--r--contrib/tools/python3/Lib/site.py63
1 files changed, 37 insertions, 26 deletions
diff --git a/contrib/tools/python3/Lib/site.py b/contrib/tools/python3/Lib/site.py
index ff959de5a6..a2ef1bbacd 100644
--- a/contrib/tools/python3/Lib/site.py
+++ b/contrib/tools/python3/Lib/site.py
@@ -179,35 +179,46 @@ def addpackage(sitedir, name, known_paths):
return
_trace(f"Processing .pth file: {fullname!r}")
try:
- # locale encoding is not ideal especially on Windows. But we have used
- # it for a long time. setuptools uses the locale encoding too.
- f = io.TextIOWrapper(io.open_code(fullname), encoding="locale")
+ with io.open_code(fullname) as f:
+ pth_content = f.read()
except OSError:
return
- with f:
- for n, line in enumerate(f):
- if line.startswith("#"):
- continue
- if line.strip() == "":
+
+ try:
+ # Accept BOM markers in .pth files as we do in source files
+ # (Windows PowerShell 5.1 makes it hard to emit UTF-8 files without a BOM)
+ pth_content = pth_content.decode("utf-8-sig")
+ except UnicodeDecodeError:
+ # Fallback to locale encoding for backward compatibility.
+ # We will deprecate this fallback in the future.
+ import locale
+ pth_content = pth_content.decode(locale.getencoding())
+ _trace(f"Cannot read {fullname!r} as UTF-8. "
+ f"Using fallback encoding {locale.getencoding()!r}")
+
+ for n, line in enumerate(pth_content.splitlines(), 1):
+ if line.startswith("#"):
+ continue
+ if line.strip() == "":
+ continue
+ try:
+ if line.startswith(("import ", "import\t")):
+ exec(line)
continue
- try:
- if line.startswith(("import ", "import\t")):
- exec(line)
- continue
- line = line.rstrip()
- dir, dircase = makepath(sitedir, line)
- if not dircase in known_paths and os.path.exists(dir):
- sys.path.append(dir)
- known_paths.add(dircase)
- except Exception as exc:
- print("Error processing line {:d} of {}:\n".format(n+1, fullname),
- file=sys.stderr)
- import traceback
- for record in traceback.format_exception(exc):
- for line in record.splitlines():
- print(' '+line, file=sys.stderr)
- print("\nRemainder of file ignored", file=sys.stderr)
- break
+ line = line.rstrip()
+ dir, dircase = makepath(sitedir, line)
+ if dircase not in known_paths and os.path.exists(dir):
+ sys.path.append(dir)
+ known_paths.add(dircase)
+ except Exception as exc:
+ print(f"Error processing line {n:d} of {fullname}:\n",
+ file=sys.stderr)
+ import traceback
+ for record in traceback.format_exception(exc):
+ for line in record.splitlines():
+ print(' '+line, file=sys.stderr)
+ print("\nRemainder of file ignored", file=sys.stderr)
+ break
if reset:
known_paths = None
return known_paths