mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
gh-57684: Add -P cmdline option and PYTHONSAFEPATH env var (#31542)
Add the -P command line option and the PYTHONSAFEPATH environment variable to not prepend a potentially unsafe path to sys.path. * Add sys.flags.safe_path flag. * Add PyConfig.safe_path member. * Programs/_bootstrap_python.c uses config.safe_path=0. * Update subprocess._optim_args_from_interpreter_flags() to handle the -P command line option. * Modules/getpath.py sets safe_path to 1 if a "._pth" file is present.
This commit is contained in:
parent
f6dd14c653
commit
ada8b6d1b1
20 changed files with 174 additions and 35 deletions
|
@ -543,6 +543,25 @@ PyConfig
|
|||
|
||||
See also the :c:member:`~PyConfig.orig_argv` member.
|
||||
|
||||
.. c:member:: int safe_path
|
||||
|
||||
If equals to zero, ``Py_RunMain()`` prepends a potentially unsafe path to
|
||||
:data:`sys.path` at startup:
|
||||
|
||||
* If :c:member:`argv[0] <PyConfig.argv>` is equal to ``L"-m"``
|
||||
(``python -m module``), prepend the current working directory.
|
||||
* If running a script (``python script.py``), prepend the script's
|
||||
directory. If it's a symbolic link, resolve symbolic links.
|
||||
* Otherwise (``python -c code`` and ``python``), prepend an empty string,
|
||||
which means the current working directory.
|
||||
|
||||
Set to 1 by the :option:`-P` command line option and the
|
||||
:envvar:`PYTHONSAFEPATH` environment variable.
|
||||
|
||||
Default: ``0`` in Python config, ``1`` in isolated config.
|
||||
|
||||
.. versionadded:: 3.11
|
||||
|
||||
.. c:member:: wchar_t* base_exec_prefix
|
||||
|
||||
:data:`sys.base_exec_prefix`.
|
||||
|
@ -809,13 +828,14 @@ PyConfig
|
|||
|
||||
If greater than 0, enable isolated mode:
|
||||
|
||||
* :data:`sys.path` contains neither the script's directory (computed from
|
||||
``argv[0]`` or the current directory) nor the user's site-packages
|
||||
directory.
|
||||
* Set :c:member:`~PyConfig.safe_path` to 1:
|
||||
don't prepend a potentially unsafe path to :data:`sys.path` at Python
|
||||
startup.
|
||||
* Set :c:member:`~PyConfig.use_environment` to 0.
|
||||
* Set :c:member:`~PyConfig.user_site_directory` to 0: don't add the user
|
||||
site directory to :data:`sys.path`.
|
||||
* Python REPL doesn't import :mod:`readline` nor enable default readline
|
||||
configuration on interactive prompts.
|
||||
* Set :c:member:`~PyConfig.use_environment` and
|
||||
:c:member:`~PyConfig.user_site_directory` to 0.
|
||||
|
||||
Default: ``0`` in Python mode, ``1`` in isolated mode.
|
||||
|
||||
|
@ -1029,12 +1049,13 @@ PyConfig
|
|||
.. c:member:: wchar_t* run_filename
|
||||
|
||||
Filename passed on the command line: trailing command line argument
|
||||
without :option:`-c` or :option:`-m`.
|
||||
without :option:`-c` or :option:`-m`. It is used by the
|
||||
:c:func:`Py_RunMain` function.
|
||||
|
||||
For example, it is set to ``script.py`` by the ``python3 script.py arg``
|
||||
command.
|
||||
command line.
|
||||
|
||||
Used by :c:func:`Py_RunMain`.
|
||||
See also the :c:member:`PyConfig.skip_source_first_line` option.
|
||||
|
||||
Default: ``NULL``.
|
||||
|
||||
|
@ -1419,9 +1440,16 @@ site-package directory to :data:`sys.path`.
|
|||
The following configuration files are used by the path configuration:
|
||||
|
||||
* ``pyvenv.cfg``
|
||||
* ``python._pth`` (Windows only)
|
||||
* ``._pth`` file (ex: ``python._pth``)
|
||||
* ``pybuilddir.txt`` (Unix only)
|
||||
|
||||
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.safe_path` to 1.
|
||||
|
||||
The ``__PYVENV_LAUNCHER__`` environment variable is used to set
|
||||
:c:member:`PyConfig.base_executable`
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue