{"id":608,"library":"appdirs","title":"AppDirs","description":"AppDirs is a small Python module (version 1.4.4) designed to determine appropriate platform-specific directories for storing user data, configuration, cache, and log files across Linux, macOS, and Windows. This project has been officially deprecated, and `platformdirs` is recommended as a more actively maintained alternative.","status":"deprecated","version":"1.4.4","language":"python","source_language":"en","source_url":"http://github.com/ActiveState/appdirs","tags":["file system","directories","platform-specific","configuration","cache","data"],"install":[{"cmd":"pip install appdirs","lang":"bash","label":"Install latest version"}],"dependencies":[],"imports":[{"note":"Commonly imported functions include `user_data_dir`, `user_config_dir`, `user_cache_dir`, `site_data_dir`, `site_config_dir`, and `user_log_dir`.","symbol":"user_data_dir","correct":"from appdirs import user_data_dir"}],"quickstart":{"code":"from appdirs import user_data_dir, user_cache_dir, user_log_dir\nimport os\n\nappname = \"MyApplication\"\nappauthor = \"MyCompany\"\nappversion = \"1.0.0\"\n\n# Get platform-specific directories\ndata_dir = user_data_dir(appname, appauthor, appversion=appversion)\ncache_dir = user_cache_dir(appname, appauthor)\nlog_dir = user_log_dir(appname, appauthor)\n\nprint(f\"Data directory: {data_dir}\")\nprint(f\"Cache directory: {cache_dir}\")\nprint(f\"Log directory: {log_dir}\")\n\n# Example: Ensure the data directory exists\nos.makedirs(data_dir, exist_ok=True)\nprint(f\"Ensured data directory exists: {os.path.exists(data_dir)}\")","lang":"python","description":"This quickstart demonstrates how to use `appdirs` to retrieve common application-specific directory paths for the current user and platform. It also shows how to create one of these directories if it doesn't already exist."},"warnings":[{"fix":"Migrate your application to use the `platformdirs` library. The API is largely compatible, making migration straightforward.","message":"This project has been officially deprecated. It is recommended to use `platformdirs` (https://pypi.org/project/platformdirs/) which is an actively maintained fork with similar functionality.","severity":"deprecated","affected_versions":"1.4.4 and older"},{"fix":"Always verify the generated paths on your target operating systems. If `appdirs`'s default naming is problematic, consider examining the `platformdirs` documentation for more flexible options or implementing custom logic.","message":"AppDirs is 'slightly opinionated' on directory names. The exact paths generated can sometimes differ from strict system conventions or other tools' interpretations, potentially leading to unexpected locations. For instance, specific suffixes might be added to directory names.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Ensure you are using at least `appdirs==1.4.4` for Python 3 environments. For the best compatibility and ongoing support, migrate to `platformdirs`.","message":"While version 1.4.4 is generally compatible with Python 3, earlier 1.x releases (e.g., 1.4.1) had specific issues with Python 3, particularly concerning Windows registry access (`winreg`) and string handling, which were addressed in subsequent minor releases. If working with older Python 3 environments or `appdirs` versions, verify generated paths carefully.","severity":"gotcha","affected_versions":"1.0.0 - 1.4.3"},{"fix":"Correct the keyword argument from `appversion` to `version` when calling `appdirs` functions. For example, change `user_data_dir(appname, appauthor, appversion=appversion)` to `user_data_dir(appname, appauthor, version=appversion)`.","message":"The functions `user_data_dir`, `user_config_dir`, `user_cache_dir`, `user_state_dir`, `user_log_dir`, and `site_data_dir` in `appdirs` expect the version argument to be named `version`, not `appversion`. Passing `appversion` will result in a `TypeError: unexpected keyword argument`.","severity":"breaking","affected_versions":"All versions"},{"fix":"Correct the keyword argument from `appversion` to `version` in your function calls. For example, use `user_data_dir(appname, appauthor, version=my_app_version)` instead of `user_data_dir(appname, appauthor, appversion=my_app_version)`.","message":"When calling `user_data_dir` (and similar functions like `user_config_dir`, `user_cache_dir`, etc.), the keyword argument for specifying the application version is `version`, not `appversion`. Using `appversion` will result in a `TypeError`.","severity":"breaking","affected_versions":"All versions"}],"env_vars":null,"last_verified":"2026-05-12T16:40:00.892Z","next_check":"2026-06-26T00:00:00.000Z","problems":[{"fix":"Install the 'appdirs' module using pip: 'pip install appdirs'.","cause":"The 'appdirs' module is not installed in the Python environment.","error":"ImportError: No module named 'appdirs'"},{"fix":"Update setuptools to the latest version: 'pip install --upgrade setuptools'.","cause":"The 'appdirs' module is not available within 'pkg_resources.extern', possibly due to an outdated or incompatible version of setuptools.","error":"ImportError: cannot import name 'appdirs' from 'pkg_resources.extern'"},{"fix":"Install the 'appdirs' module using pip: 'pip install appdirs'.","cause":"The 'appdirs' module is not installed in the Python environment.","error":"ModuleNotFoundError: No module named 'appdirs'"},{"fix":"Change the keyword argument from `appversion` to `version`. For example, `appdirs.user_data_dir(appname, appauthor, version=appversion)`.","cause":"When calling `appdirs` functions like `user_data_dir`, the argument for specifying the application version is `version`, not `appversion`.","error":"TypeError: unexpected keyword argument 'appversion'"},{"fix":"Try to force reinstall `appdirs`: `pip install appdirs --ignore-installed`. If the problem persists, uninstall it first `pip uninstall appdirs` and then reinstall `pip install appdirs`.","cause":"This error often occurs during an upgrade or downgrade of `appdirs` via `pip`, suggesting a corrupted installation or a conflict during the uninstall/reinstall process.","error":"IOError: [Errno 2] No such file or directory: '.../appdirs-1.4.x.dist-info/METADATA'"}],"ecosystem":"pypi","meta_description":null,"install_score":80,"install_tag":"verified","quickstart_score":0,"quickstart_tag":"stale","pypi_latest":"1.4.4","install_checks":{"last_tested":"2026-05-12","tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0,"mem_mb":0.1,"disk_size":"17.8M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0,"mem_mb":0.1,"disk_size":"17.8M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.5,"import_time_s":0,"mem_mb":0.1,"disk_size":"18M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0,"mem_mb":0.1,"disk_size":"18M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0,"mem_mb":0.1,"disk_size":"19.7M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0,"mem_mb":0.1,"disk_size":"19.7M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.7,"import_time_s":0,"mem_mb":0.1,"disk_size":"20M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0,"mem_mb":0.1,"disk_size":"20M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0,"mem_mb":0.1,"disk_size":"11.6M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0,"mem_mb":0.1,"disk_size":"11.6M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.5,"import_time_s":0,"mem_mb":0.1,"disk_size":"12M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0,"mem_mb":0.1,"disk_size":"12M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0,"mem_mb":0.3,"disk_size":"11.3M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0,"mem_mb":0.3,"disk_size":"11.2M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.4,"import_time_s":0,"mem_mb":0.1,"disk_size":"12M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0,"mem_mb":0.1,"disk_size":"12M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0,"mem_mb":0.1,"disk_size":"17.3M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0,"mem_mb":0.1,"disk_size":"17.3M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.8,"import_time_s":0,"mem_mb":0.1,"disk_size":"18M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0,"mem_mb":0.1,"disk_size":"18M"}]},"quickstart_checks":{"last_tested":"2026-04-24","tag":"stale","tag_description":"widespread failures or data too old to trust","results":[{"runtime":"python:3.10-alpine","exit_code":1},{"runtime":"python:3.10-slim","exit_code":1},{"runtime":"python:3.11-alpine","exit_code":1},{"runtime":"python:3.11-slim","exit_code":1},{"runtime":"python:3.12-alpine","exit_code":1},{"runtime":"python:3.12-slim","exit_code":1},{"runtime":"python:3.13-alpine","exit_code":1},{"runtime":"python:3.13-slim","exit_code":1},{"runtime":"python:3.9-alpine","exit_code":1},{"runtime":"python:3.9-slim","exit_code":1}]}}