Skip to main content

A small Python module for determining appropriate platform-specific dirs, e.g. a "user data dir".

Project description

the problem

https://github.com/platformdirs/platformdirs/workflows/Test/badge.svg

What directory should your app use for storing user data? If running on macOS, you should use:

~/Library/Application Support/<AppName>

If on Windows (at least English Win XP) that should be:

C:\Documents and Settings\<User>\Application Data\Local Settings\<AppAuthor>\<AppName>

or possibly:

C:\Documents and Settings\<User>\Application Data\<AppAuthor>\<AppName>

for roaming profiles but that is another story.

On Linux (and other Unices) the dir, according to the XDG spec, is:

~/.local/share/<AppName>

platformdirs to the rescue

This kind of thing is what the platformdirs module is for. platformdirs will help you choose an appropriate:

  • user data dir (user_data_dir)

  • user config dir (user_config_dir)

  • user cache dir (user_cache_dir)

  • site data dir (site_data_dir)

  • site config dir (site_config_dir)

  • user log dir (user_log_dir)

and also:

  • is a single module so other Python packages can include their own private copy

  • is slightly opinionated on the directory names used. Look for “OPINION” in documentation and code for when an opinion is being applied.

some example output

On macOS:

>>> from platformdirs import *
>>> appname = "SuperApp"
>>> appauthor = "Acme"
>>> user_data_dir(appname, appauthor)
'/Users/trentm/Library/Application Support/SuperApp'
>>> site_data_dir(appname, appauthor)
'/Library/Application Support/SuperApp'
>>> user_cache_dir(appname, appauthor)
'/Users/trentm/Library/Caches/SuperApp'
>>> user_log_dir(appname, appauthor)
'/Users/trentm/Library/Logs/SuperApp'

On Windows 7:

>>> from platformdirs import *
>>> appname = "SuperApp"
>>> appauthor = "Acme"
>>> user_data_dir(appname, appauthor)
'C:\\Users\\trentm\\AppData\\Local\\Acme\\SuperApp'
>>> user_data_dir(appname, appauthor, roaming=True)
'C:\\Users\\trentm\\AppData\\Roaming\\Acme\\SuperApp'
>>> user_cache_dir(appname, appauthor)
'C:\\Users\\trentm\\AppData\\Local\\Acme\\SuperApp\\Cache'
>>> user_log_dir(appname, appauthor)
'C:\\Users\\trentm\\AppData\\Local\\Acme\\SuperApp\\Logs'

On Linux:

>>> from platformdirs import *
>>> appname = "SuperApp"
>>> appauthor = "Acme"
>>> user_data_dir(appname, appauthor)
'/home/trentm/.local/share/SuperApp
>>> site_data_dir(appname, appauthor)
'/usr/local/share/SuperApp'
>>> site_data_dir(appname, appauthor, multipath=True)
'/usr/local/share/SuperApp:/usr/share/SuperApp'
>>> user_cache_dir(appname, appauthor)
'/home/trentm/.cache/SuperApp'
>>> user_log_dir(appname, appauthor)
'/home/trentm/.cache/SuperApp/log'
>>> user_config_dir(appname)
'/home/trentm/.config/SuperApp'
>>> site_config_dir(appname)
'/etc/xdg/SuperApp'
>>> os.environ['XDG_CONFIG_DIRS'] = '/etc:/usr/local/etc'
>>> site_config_dir(appname, multipath=True)
'/etc/SuperApp:/usr/local/etc/SuperApp'

PlatformDirs for convenience

>>> from platformdirs import PlatformDirs
>>> dirs = PlatformDirs("SuperApp", "Acme")
>>> dirs.user_data_dir
'/Users/trentm/Library/Application Support/SuperApp'
>>> dirs.site_data_dir
'/Library/Application Support/SuperApp'
>>> dirs.user_cache_dir
'/Users/trentm/Library/Caches/SuperApp'
>>> dirs.user_log_dir
'/Users/trentm/Library/Logs/SuperApp'

Per-version isolation

If you have multiple versions of your app in use that you want to be able to run side-by-side, then you may want version-isolation for these dirs:

>>> from platformdirs import PlatformDirs
>>> dirs = PlatformDirs("SuperApp", "Acme", version="1.0")
>>> dirs.user_data_dir
'/Users/trentm/Library/Application Support/SuperApp/1.0'
>>> dirs.site_data_dir
'/Library/Application Support/SuperApp/1.0'
>>> dirs.user_cache_dir
'/Users/trentm/Library/Caches/SuperApp/1.0'
>>> dirs.user_log_dir
'/Users/trentm/Library/Logs/SuperApp/1.0'

Why the Fork?

This repository is a friendly fork of the wonderful work started by ActiveState who created appdirs, this package’s ancestor.

Maintaining an open source project is no easy task, particularly from within an organization, and the Python community is indebted to appdirs (and to Trent Mick and Jeff Rouse in particular) for creating an incredibly useful simple module, as evidenced by the wide number of users it has attracted over the years.

Nonetheless, given the number of long-standing open issues and pull requests, and no clear path towards ensuring that maintenance of the package would continue or grow, this fork was created.

Contributions are most welcome.

platformdirs Changelog

platformdirs 2.0.0

  • BREAKING Name change as part of the friendly fork

  • BREAKING Remove support for end-of-life Pythons 2.6, 3.2, and 3.3

  • BREAKING Correct the config directory on OSX/macOS

  • Add Python 3.7, 3.8, and 3.9 support

appdirs 1.4.4

  • [PR #92] Don’t import appdirs from setup.py which resolves issue #91

Project officially classified as Stable which is important for inclusion in other distros such as ActivePython.

appdirs 1.4.3

  • [PR #76] Python 3.6 invalid escape sequence deprecation fixes

  • Fix for Python 3.6 support

appdirs 1.4.2

  • [PR #84] Allow installing without setuptools

  • [PR #86] Fix string delimiters in setup.py description

  • Add Python 3.6 support

appdirs 1.4.1

  • [issue #38] Fix _winreg import on Windows Py3

  • [issue #55] Make appname optional

appdirs 1.4.0

  • [PR #42] AppAuthor is now optional on Windows

  • [issue 41] Support Jython on Windows, Mac, and Unix-like platforms. Windows support requires JNA.

  • [PR #44] Fix incorrect behaviour of the site_config_dir method

appdirs 1.3.0

  • [Unix, issue 16] Conform to XDG standard, instead of breaking it for everybody

  • [Unix] Removes gratuitous case mangling of the case, since *nix-es are usually case sensitive, so mangling is not wise

  • [Unix] Fixes the utterly wrong behaviour in site_data_dir, return result based on XDG_DATA_DIRS and make room for respecting the standard which specifies XDG_DATA_DIRS is a multiple-value variable

  • [Issue 6] Add *_config_dir which are distinct on nix-es, according to XDG specs; on Windows and Mac return the corresponding *_data_dir

appdirs 1.2.0

  • [Unix] Put user_log_dir under the cache dir on Unix. Seems to be more typical.

  • [issue 9] Make unicode work on py3k.

appdirs 1.1.0

  • [issue 4] Add AppDirs.user_log_dir.

  • [Unix, issue 2, issue 7] appdirs now conforms to XDG base directory spec.

  • [Mac, issue 5] Fix site_data_dir() on Mac.

  • [Mac] Drop use of ‘Carbon’ module in favour of hardcoded paths; supports Python3 now.

  • [Windows] Append “Cache” to user_cache_dir on Windows by default. Use opinion=False option to disable this.

  • Add appdirs.AppDirs convenience class. Usage:

    >>> dirs = AppDirs("SuperApp", "Acme", version="1.0")
    >>> dirs.user_data_dir
    '/Users/trentm/Library/Application Support/SuperApp/1.0'
    
  • [Windows] Cherry-pick Komodo’s change to downgrade paths to the Windows short paths if there are high bit chars.

  • [Linux] Change default user_cache_dir() on Linux to be singular, e.g. “~/.superapp/cache”.

  • [Windows] Add roaming option to user_data_dir() (for use on Windows only) and change the default user_data_dir behaviour to use a non-roaming profile dir (CSIDL_LOCAL_APPDATA instead of CSIDL_APPDATA). Why? Because a large roaming profile can cause login speed issues. The “only syncs on logout” behaviour can cause surprises in appdata info.

appdirs 1.0.1 (never released)

Started this changelog 27 July 2010. Before that this module originated in the Komodo product as applib.py and then as applib/location.py (used by PyPM in ActivePython). This is basically a fork of applib.py 1.0.1 and applib/location.py 1.0.1.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

platformdirs-2.0.2.tar.gz (11.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

platformdirs-2.0.2-py2.py3-none-any.whl (10.4 kB view details)

Uploaded Python 2Python 3

File details

Details for the file platformdirs-2.0.2.tar.gz.

File metadata

  • Download URL: platformdirs-2.0.2.tar.gz
  • Upload date:
  • Size: 11.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.9.6

File hashes

Hashes for platformdirs-2.0.2.tar.gz
Algorithm Hash digest
SHA256 3b00d081227d9037bbbca521a5787796b5ef5000faea1e43fd76f1d44b06fcfa
MD5 e11ea2bee61b06c46e7db5576cc56624
BLAKE2b-256 c1031dcc356abdfbe22bec1194852b02ed809c8bdf91e416b26f17f485c62984

See more details on using hashes here.

File details

Details for the file platformdirs-2.0.2-py2.py3-none-any.whl.

File metadata

  • Download URL: platformdirs-2.0.2-py2.py3-none-any.whl
  • Upload date:
  • Size: 10.4 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.9.6

File hashes

Hashes for platformdirs-2.0.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 0b9547541f599d3d242078ae60b927b3e453f0ad52f58b4d4bc3be86aed3ec41
MD5 12afdbad06926317501aa2b183dc5c9f
BLAKE2b-256 1257f4e6d433fba8bde239baa65f626a31fc6d0556a2065fcc81aaa0f4f1507b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page