Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 4a7fe7e

Browse files
committed
Issue #23955: Add pyvenv.cfg option to suppress registry/environment lookup for generating sys.path.
Also cleans up and secures getpathp.c
1 parent d9ef74e commit 4a7fe7e

4 files changed

Lines changed: 127 additions & 78 deletions

File tree

Doc/using/windows.rst

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -661,6 +661,17 @@ This is how :data:`sys.path` is populated on Windows:
661661
the environment, and no registry entries can be found, a default path with
662662
relative entries is used (e.g. ``.\Lib;.\plat-win``, etc).
663663

664+
If a ``pyvenv.cfg`` file is found alongside the main executable or in the
665+
directory one level above the executable, the following variations apply:
666+
667+
* If ``home`` is an absolute path and :envvar:`PYTHONHOME` is not set, this
668+
path is used instead of the path to the main executable when deducing the
669+
home location.
670+
671+
* If ``applocal`` is set to true, the ``home`` property or the main executable
672+
is always used as the home path, and all environment variables or registry
673+
values affecting the path are ignored. The landmark file is not checked.
674+
664675
The end result of all this is:
665676

666677
* When running :file:`python.exe`, or any other .exe in the main Python
@@ -672,13 +683,17 @@ The end result of all this is:
672683
etc), the "Python Home" will not be deduced, so the core path from the
673684
registry is used. Other "application paths" in the registry are always read.
674685

675-
* If Python can't find its home and there is no registry (eg, frozen .exe, some
676-
very strange installation setup) you get a path with some default, but
686+
* If Python can't find its home and there are no registry value (frozen .exe,
687+
some very strange installation setup) you get a path with some default, but
677688
relative, paths.
678689

679690
For those who want to bundle Python into their application or distribution, the
680691
following advice will prevent conflicts with other installations:
681692

693+
* Include a ``pyvenv.cfg`` file alongside your executable containing
694+
``applocal = true``. This will ensure that your own directory will be used to
695+
resolve paths even if you have included the standard library in a ZIP file.
696+
682697
* If you are loading :file:`python3.dll` or :file:`python35.dll` in your own
683698
executable, explicitly call :c:func:`Py_SetPath` or (at least)
684699
:c:func:`Py_SetProgramName` before :c:func:`Py_Initialize`.
@@ -688,7 +703,7 @@ following advice will prevent conflicts with other installations:
688703

689704
* If you cannot use the previous suggestions (for example, you are a
690705
distribution that allows people to run :file:`python.exe` directly), ensure
691-
that the landmark file (:file:`Lib\\os.py`) exists in your bundled library.
706+
that the landmark file (:file:`Lib\\os.py`) exists in your install directory.
692707
(Note that it will not be detected inside a ZIP file.)
693708

694709
These will ensure that the files in a system-wide installation will not take

Misc/NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ Release date: 2015-05-24
1010
Core and Builtins
1111
-----------------
1212

13+
- Issue #23955: Add pyvenv.cfg option to suppress registry/environment
14+
lookup for generating sys.path on Windows.
15+
1316
- Issue #24257: Fixed system error in the comparison of faked
1417
types.SimpleNamespace.
1518

0 commit comments

Comments
 (0)