-
-
Notifications
You must be signed in to change notification settings - Fork 32.1k
Paths under %appdata% are written to the local cache instead #122057
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
Comments
This only seems to happen in the Windows Store version of Python. |
The store app is isolated for certain filesystem and registry paths. The intent is to prevent apps from interfering with each other and to support clean removal of uninstalled apps. The redirections are implemented by drivers in the Windows kernel, so I don't think there's anything we can do about it. |
I assume there's a well-known list of redirected directories - perhaps the Windows Store version can be modified to emit a warning when trying to access them? The current behavior is very misleading (I'm surprised Microsoft themselves decided to silently redirect instead of returning a permissions error). |
This is the intended design of the operating system. I suspect you actually ran into this via a different issue than what was described in the original post. Files that Python creates under AppData are for Python to access, and it can always successfully access them, which suggests you were trying to write files for a different app? Perhaps if you describe the actual issue then we can find a workaround. |
There are 2 main use cases for AppData:
|
Both of those cases should work with the Store version, as more recent (in the last 3-4 years) versions of Windows changed the shadowing behaviour to only affect newly created files. If you try to read another app's files, or open for writing, you should get the actual file. In particular, the Store package does actually use best Windows practices. Those practices are defined by Windows, not by users, and the behaviour you're seeing here is what Windows says is best practice for apps (which specifically includes "don't use other apps' directories under AppData"). |
This still doesn't solve creating new files, which is sometimes required (e.g. some apps have configuration subdirectories that files should be added to to define certain settings) And most importantly- %LocalAppData% doesn't roam! |
If the app's folder already exists, new files will be created in the existing one. It's just things created directly in App data stored in the app-specific directory roams, backs-up/restores, resets, and uninstalls far more reliably than the old mechanisms. If you think it doesn't, you should report it to Windows, because it's their system and not ours. |
As a workaround, using pathlib.Path.resolve(strict=False), where pathlib.Path is a path that refers to something in /AppData/, will refer to the actual location, i.e., .../LocalCache/... This'll be helpful if you actually need to refer to the location of your file. You'll have to create the file/folder first, otherwise resolve( ) will refer to .../LocalCache/... which doesn't exist yet. |
We aren't doing Store app releases anymore - runtimes installed using the Python install manager won't have this |
Uh oh!
There was an error while loading. Please reload this page.
Bug report
Bug description:
All paths under
C:\Users\username\AppData\REST-OF-THE-PATH
are actually treated asC:\Users\username\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\REST-OF-THE-PATH
.This happens regardless of working in a venv or not, and regardless of the library call you're using (i.e.
pathlib
andopen
behave the same)Expected Result
A file with the text "Test" is created under
C:\Users\your-username\AppData\Test.txt
Actual Result
The file is created under
C:\Users\your-username\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\Test.txt
Additional Information
CPython versions tested on:
3.12
Operating systems tested on:
Windows
The text was updated successfully, but these errors were encountered: