Package: xdgappdirs
This is a fork and almost drop-in replacement ofappdirsthat follows the XDG BaseDir Spec on macOS
when the relevantXDG_*environment variables are available. For instance,
on macOS, whenXDG_CONFIG_HOMEis set to/Users/steve/.config,user_config_dir('foo')evaluates to/Users/steve/.config/foo, whereas
whenXDG_CONFIG_HOMEis not set or empty, it evaluates to/Users/steve/Library/Application Support/foo. This gives XDG fans a choice
while not mandating.configfor everyone else, especially for GUI apps.Other changes:RevertsActiveState/appdirs#100. On macOS,user_config_dirandsite_config_direvaluates to subdirs of~/Library/Application Supportand/Library/Application Support(unless
the relevantXDG_*env vars are set and non-empty), rather than subdirs of~/Library/Preferencesand/Library/Preferences, which are specifically
for plists and not suitable for anything else. You don’t needappdirsto
tell you where to write plists.Properly handle emptyXDG_*env vars. According to XDG BaseDir Spec,
defaults should be used when the env vars are empty.Support for returningpathlib.Path([contributed](https://github.com/zmwangx/xdgappdirs/pull/1) by @pmav99).The original README forappdirsfollows.the problemWhat 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>forroaming profilesbut that is another story.On Linux (and other Unices) the dir, according to theXDG
spec, is:~/.local/share/<AppName>appdirsto the rescueThis kind of thing is what theappdirsmodule is for.appdirswill
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 copyis slightly opinionated on the directory names used. Look for “OPINION” in
documentation and code for when an opinion is being applied.some example outputOn macOS:>>> from appdirs 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 appdirs 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 appdirs 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'AppDirsfor convenience>>> from appdirs import AppDirs
>>> dirs = AppDirs("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 isolationIf 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 appdirs import AppDirs
>>> dirs = AppDirs("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'appdirs Changelogxdgappdirs 1.4.5Add support for returningpathlib.Path(#1).xdgappdirs 1.4.4.3Rename module toxdgappdirsto allow coexistence withappdirs.xdgappdirs 1.4.4Deviate from appdirs (see top of README)[PR #92] Don’t import appdirs from setup.py which resolves issue #91Add Python 3.7 supportRemove support for end-of-life Pythons 2.6, 3.2, and 3.3Project 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 fixesFix for Python 3.6 supportappdirs 1.4.2[PR #84] Allow installing without setuptools[PR #86] Fix string delimiters in setup.py descriptionAdd Python 3.6 supportappdirs 1.4.1[issue #38] Fix _winreg import on Windows Py3[issue #55] Make appname optionalappdirs 1.4.0[PR #42] AppAuthor is now optional on Windows[issue 41] Support Jython on Windows, Mac, and Unix-like platforms. Windows
support requiresJNA.[PR #44] Fix incorrect behaviour of the site_config_dir methodappdirs 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 insite_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_dirwhich are distinct on nix-es, according to
XDG specs; on Windows and Mac return the corresponding*_data_dirappdirs 1.2.0[Unix] Putuser_log_dirunder thecachedir on Unix. Seems to be more
typical.[issue 9] Makeunicodework on py3k.appdirs 1.1.0[issue 4] AddAppDirs.user_log_dir.[Unix, issue 2, issue 7] appdirs now conforms toXDG base directory spec.[Mac, issue 5] Fixsite_data_dir()on Mac.[Mac] Drop use of ‘Carbon’ module in favour of hardcoded paths; supports
Python3 now.[Windows] Append “Cache” touser_cache_diron Windows by default. Useopinion=Falseoption to disable this.Addappdirs.AppDirsconvenience 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 defaultuser_cache_dir()on Linux to be singular, e.g.
“~/.superapp/cache”.[Windows] Addroamingoption touser_data_dir()(for use on Windows only)
and change the defaultuser_data_dirbehaviour to use anon-roaming
profile dir (CSIDL_LOCAL_APPDATAinstead ofCSIDL_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 theKomodoproduct asapplib.pyand then
asapplib/location.py(used byPyPMinActivePython). This is basically a fork of
applib.py 1.0.1 and applib/location.py 1.0.1.