Commit c09fca67 authored by Éric Araujo's avatar Éric Araujo

Do not touch sys.path when site is imported and python was started with -S.

Original patch by Carl Meyer, review by Brett Cannon, small doc editions by
yours truly.  Fixes #11591.
parent f59c7b2b
...@@ -13,7 +13,11 @@ import can be suppressed using the interpreter's :option:`-S` option. ...@@ -13,7 +13,11 @@ import can be suppressed using the interpreter's :option:`-S` option.
.. index:: triple: module; search; path .. index:: triple: module; search; path
Importing this module will append site-specific paths to the module search path. Importing this module will append site-specific paths to the module search
path, unless :option:`-S` was used. In that case, this module can be safely
imported with no automatic modifications to the module search path. To
explicitly trigger the usual site-specific additions, call the
:func:`site.main` function.
.. index:: .. index::
pair: site-python; directory pair: site-python; directory
...@@ -114,6 +118,13 @@ empty, and the path manipulations are skipped; however the import of ...@@ -114,6 +118,13 @@ empty, and the path manipulations are skipped; however the import of
.. envvar:: PYTHONUSERBASE .. envvar:: PYTHONUSERBASE
.. function:: main()
Adds all the standard site-specific directories to the module search
path. This function is called automatically when this module is imported,
unless the :program:`python` interpreter was started with the :option:`-S`
flag.
.. function:: addsitedir(sitedir, known_paths=None) .. function:: addsitedir(sitedir, known_paths=None)
Adds a directory to sys.path and processes its pth files. Adds a directory to sys.path and processes its pth files.
......
...@@ -239,7 +239,9 @@ Miscellaneous options ...@@ -239,7 +239,9 @@ Miscellaneous options
.. cmdoption:: -S .. cmdoption:: -S
Disable the import of the module :mod:`site` and the site-dependent Disable the import of the module :mod:`site` and the site-dependent
manipulations of :data:`sys.path` that it entails. manipulations of :data:`sys.path` that it entails. Also disable these
manipulations if :mod:`site` is explicitly imported later (call
:func:`site.main` if you want them to be triggered).
.. cmdoption:: -u .. cmdoption:: -u
......
...@@ -128,3 +128,8 @@ that may require changes to your code: ...@@ -128,3 +128,8 @@ that may require changes to your code:
* Stub * Stub
.. Issue #11591: When :program:`python` was started with :option:`-S`,
``import site`` will not add site-specific paths to the module search
paths. In previous versions, it did. See changeset for doc changes in
various files. Contributed by Carl Meyer with editions by Éric Araujo.
...@@ -508,6 +508,11 @@ def execusercustomize(): ...@@ -508,6 +508,11 @@ def execusercustomize():
def main(): def main():
"""Add standard site-specific directories to the module search path.
This function is called automatically when this module is imported,
unless the python interpreter was started with the -S flag.
"""
global ENABLE_USER_SITE global ENABLE_USER_SITE
abs_paths() abs_paths()
...@@ -526,7 +531,10 @@ def main(): ...@@ -526,7 +531,10 @@ def main():
if ENABLE_USER_SITE: if ENABLE_USER_SITE:
execusercustomize() execusercustomize()
main() # Prevent edition of sys.path when python was started with -S and
# site is imported later.
if not sys.flags.no_site:
main()
def _script(): def _script():
help = """\ help = """\
......
...@@ -81,12 +81,15 @@ Core and Builtins ...@@ -81,12 +81,15 @@ Core and Builtins
Library Library
------- -------
- Issue #11591: Prevent "import site" from modifying sys.path when python
was started with -S.
- Issue #11371: Mark getopt error messages as localizable. Patch by Filip - Issue #11371: Mark getopt error messages as localizable. Patch by Filip
Gruszczyński. Gruszczyński.
- Issue #11333: Add __slots__ to collections ABCs. - Issue #11333: Add __slots__ to collections ABCs.
- Issue #11628: cmp_to_key generated class should use __slots__ - Issue #11628: cmp_to_key generated class should use __slots__.
- Issue #5537: Fix time2isoz() and time2netscape() functions of - Issue #5537: Fix time2isoz() and time2netscape() functions of
httplib.cookiejar for expiration year greater than 2038 on 32-bit systems. httplib.cookiejar for expiration year greater than 2038 on 32-bit systems.
......
...@@ -169,7 +169,9 @@ Disable the import of the module ...@@ -169,7 +169,9 @@ Disable the import of the module
.I site .I site
and the site-dependent manipulations of and the site-dependent manipulations of
.I sys.path .I sys.path
that it entails. that it entails. Also disable these manipulations if
.I site
is explicitly imported later.
.TP .TP
.B \-u .B \-u
Force the binary I/O layers of stdin, stdout and stderr to be unbuffered. Force the binary I/O layers of stdin, stdout and stderr to be unbuffered.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment