Skip to content

[3.10] GH-95029: Describe Windows Store package isolation and redirection in more detail (GH-95030) #95074

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 21, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 31 additions & 3 deletions Doc/using/windows.rst
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ developers using Python for any kind of project.

:ref:`windows-store` is a simple installation of Python that is suitable for
running scripts and packages, and using IDLE or other development environments.
It requires Windows 10, but can be safely installed without corrupting other
It requires Windows 10 and above, but can be safely installed without corrupting other
programs. It also provides many convenient commands for launching Python and
its tools.

Expand Down Expand Up @@ -331,14 +331,42 @@ Python in Start and right-click to select Uninstall. Uninstalling will
remove all packages you installed directly into this Python installation, but
will not remove any virtual environments

Known Issues
Known issues
------------

Redirection of local data, registry, and temporary paths
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Because of restrictions on Microsoft Store apps, Python scripts may not have
full write access to shared locations such as ``TEMP`` and the registry.
full write access to shared locations such as :envvar:`TEMP` and the registry.
Instead, it will write to a private copy. If your scripts must modify the
shared locations, you will need to install the full installer.

At runtime, Python will use a private copy of well-known Windows folders and the registry.
For example, if the environment variable :envvar:`%APPDATA%` is :file:`c:\\Users\\<user>\\AppData\\`,
then when writing to :file:`C:\\Users\\<user>\\AppData\\Local` will write to
:file:`C:\\Users\\<user>\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\\LocalCache\\Local\\`.

When reading files, Windows will return the file from the private folder, or if that does not exist, the
real Windows directory. For example reading :file:`C:\\Windows\\System32` returns the contents of :file:`C:\\Windows\\System32`
plus the contents of :file:`C:\\Program Files\\WindowsApps\\package_name\\VFS\\SystemX86`.

You can find the real path of any existing file using :func:`os.path.realpath`:

.. code-block:: python

>>> import os
>>> test_file = 'C:\\Users\\example\\AppData\\Local\\test.txt'
>>> os.path.realpath(test_file)
'C:\\Users\\example\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\\LocalCache\\Local\\test.txt'

When writing to the Windows Registry, the following behaviors exist:

* Reading from ``HKLM\\Software`` is allowed and results are merged with the :file:`registry.dat` file in the package.
* Writing to ``HKLM\\Software`` is not allowed if the corresponding key/value exists, i.e. modifying existing keys.
* Writing to ``HKLM\\Software`` is allowed as long as a corresponding key/value does not exist in the package
and the user has the correct access permissions.

For more detail on the technical basis for these limitations, please consult
Microsoft's documentation on packaged full-trust apps, currently available at
`docs.microsoft.com/en-us/windows/msix/desktop/desktop-to-uwp-behind-the-scenes
Expand Down