Commit 4a7fe7e3 authored by Steve Dower's avatar Steve Dower

Issue #23955: Add pyvenv.cfg option to suppress registry/environment lookup...

Issue #23955: Add pyvenv.cfg option to suppress registry/environment lookup for generating sys.path.
Also cleans up and secures getpathp.c
parent d9ef74e3
...@@ -661,6 +661,17 @@ This is how :data:`sys.path` is populated on Windows: ...@@ -661,6 +661,17 @@ This is how :data:`sys.path` is populated on Windows:
the environment, and no registry entries can be found, a default path with the environment, and no registry entries can be found, a default path with
relative entries is used (e.g. ``.\Lib;.\plat-win``, etc). relative entries is used (e.g. ``.\Lib;.\plat-win``, etc).
If a ``pyvenv.cfg`` file is found alongside the main executable or in the
directory one level above the executable, the following variations apply:
* If ``home`` is an absolute path and :envvar:`PYTHONHOME` is not set, this
path is used instead of the path to the main executable when deducing the
home location.
* If ``applocal`` is set to true, the ``home`` property or the main executable
is always used as the home path, and all environment variables or registry
values affecting the path are ignored. The landmark file is not checked.
The end result of all this is: The end result of all this is:
* When running :file:`python.exe`, or any other .exe in the main Python * When running :file:`python.exe`, or any other .exe in the main Python
...@@ -672,13 +683,17 @@ The end result of all this is: ...@@ -672,13 +683,17 @@ The end result of all this is:
etc), the "Python Home" will not be deduced, so the core path from the etc), the "Python Home" will not be deduced, so the core path from the
registry is used. Other "application paths" in the registry are always read. registry is used. Other "application paths" in the registry are always read.
* If Python can't find its home and there is no registry (eg, frozen .exe, some * If Python can't find its home and there are no registry value (frozen .exe,
very strange installation setup) you get a path with some default, but some very strange installation setup) you get a path with some default, but
relative, paths. relative, paths.
For those who want to bundle Python into their application or distribution, the For those who want to bundle Python into their application or distribution, the
following advice will prevent conflicts with other installations: following advice will prevent conflicts with other installations:
* Include a ``pyvenv.cfg`` file alongside your executable containing
``applocal = true``. This will ensure that your own directory will be used to
resolve paths even if you have included the standard library in a ZIP file.
* If you are loading :file:`python3.dll` or :file:`python35.dll` in your own * If you are loading :file:`python3.dll` or :file:`python35.dll` in your own
executable, explicitly call :c:func:`Py_SetPath` or (at least) executable, explicitly call :c:func:`Py_SetPath` or (at least)
:c:func:`Py_SetProgramName` before :c:func:`Py_Initialize`. :c:func:`Py_SetProgramName` before :c:func:`Py_Initialize`.
...@@ -688,7 +703,7 @@ following advice will prevent conflicts with other installations: ...@@ -688,7 +703,7 @@ following advice will prevent conflicts with other installations:
* If you cannot use the previous suggestions (for example, you are a * If you cannot use the previous suggestions (for example, you are a
distribution that allows people to run :file:`python.exe` directly), ensure distribution that allows people to run :file:`python.exe` directly), ensure
that the landmark file (:file:`Lib\\os.py`) exists in your bundled library. that the landmark file (:file:`Lib\\os.py`) exists in your install directory.
(Note that it will not be detected inside a ZIP file.) (Note that it will not be detected inside a ZIP file.)
These will ensure that the files in a system-wide installation will not take These will ensure that the files in a system-wide installation will not take
......
...@@ -10,6 +10,9 @@ Release date: 2015-05-24 ...@@ -10,6 +10,9 @@ Release date: 2015-05-24
Core and Builtins Core and Builtins
----------------- -----------------
- Issue #23955: Add pyvenv.cfg option to suppress registry/environment
lookup for generating sys.path on Windows.
- Issue #24257: Fixed system error in the comparison of faked - Issue #24257: Fixed system error in the comparison of faked
types.SimpleNamespace. types.SimpleNamespace.
......
This diff is collapsed.
...@@ -149,6 +149,9 @@ def main(): ...@@ -149,6 +149,9 @@ def main():
copied = copy_to_layout(temp / t.rstrip('/'), rglob(s, p, c)) copied = copy_to_layout(temp / t.rstrip('/'), rglob(s, p, c))
print('Copied {} files'.format(copied)) print('Copied {} files'.format(copied))
with open(str(temp / 'pyvenv.cfg'), 'w') as f:
print('applocal = true', file=f)
total = copy_to_layout(out, rglob(temp, '*', None)) total = copy_to_layout(out, rglob(temp, '*', None))
print('Wrote {} files to {}'.format(total, out)) print('Wrote {} files to {}'.format(total, out))
finally: finally:
......
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