Skip to content

Python from the Windows store alias paths #90

Open
@tonybaloney

Description

@tonybaloney

Not sure if this a bug in platformdirs, but users will hit this issue so I'll share my observations

Platform dirs will return the environment variable path for things like data dir, log dir for the Python from the Windows Store.

Python in the Windows store uses app execution aliases, so the actual path is something else.

For example:

>>> import platformdirs, os
>>> d = platformdirs.user_data_dir(appname="foo", appauthor="bar")
>>> os.makedirs(d)
>>> d
'C:\\Users\\anthonyshaw\\AppData\\Local\\bar\\foo\\'
>>> test_file = os.path.join(d, 'test.txt')
>>> test_file
'C:\\Users\\anthonyshaw\\AppData\\Local\\bar\\foo\\test.txt'
>>> os.path.realpath(test_file)
'C:\\Users\\anthonyshaw\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\\LocalCache\\Local\\bar\\foo\\test.txt'

This causes issues when you launch a process and use that path for something (e.g. where you created a file), but the process will resolve to a different path.

This can be disabled in apps > advanced app settings > app execution aliases in Windows.

NB: os.path.realpath only resolves this redirection in Python 3.8+ and it only works for files, not directories.

Activity

Julian

Julian commented on Jul 16, 2022

@Julian
Contributor

Thanks for raising -- just to confirm, the same issue exists/existed on appdirs on windows, correct?

tonybaloney

tonybaloney commented on Jul 16, 2022

@tonybaloney
Author

yes, this would apply to other appdirs

ofek

ofek commented on Jul 17, 2022

@ofek
Collaborator
gaborbernat

gaborbernat commented on Nov 13, 2022

@gaborbernat
Member

PR welcome 👍

ericoporto

ericoporto commented on Apr 8, 2023

@ericoporto

Also found an interesting comment here

workaround:

>>> import os
>>> p1 = os.path.expandvars("%APPDATA%\\test.txt")
>>> p1
'C:\\Users\\steve\\AppData\\Roaming\\test.txt'
>>> open(p1, "w").close()
>>> os.system(f'copy "{os.path.realpath(p1)}" "{p1}"')
        1 file(s) copied.
0
>>>

I am not sure how this works across python versions. I mostly really need python 3.8 compatibility as it's the last version that is compatible with Windows 7 - this also means it runs great through wine.

For my usecase, this means I prefer the "wrong" results we currently have as I don't want the redirection in Windows Store Python but want the redirection in Python over Wine, so for me, manually handling this after works best, as I believe there would be no Wine handling here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinghelp wantedExtra attention is needed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @Julian@gaborbernat@tonybaloney@ericoporto@ofek

        Issue actions

          Python from the Windows store alias paths · Issue #90 · tox-dev/platformdirs