一个小的python模块,用于确定适当的特定于平台的dir,例如“用户数据dir”。

appdirs的Python项目详细描述


https://secure.travis-ci.org/ActiveState/appdirs.png

问题

应用程序应使用哪个目录存储用户数据?如果在Mac OS X上运行,则 应该使用:

~/Library/Application Support/<AppName>

如果在Windows上(至少是英语Win XP),则应该是:

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

或者可能:

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

但那是另一个故事。

在linux(和其他unices)上,根据XDG spec,目录是:

~/.local/share/<AppName>

appdirs前往救援

这就是appdirs模块的用途。appdirs将 帮助您选择合适的:

  • 用户数据目录(user_data_dir
  • 用户配置目录(user_config_dir
  • 用户缓存目录(user_cache_dir
  • 站点数据目录(site_data_dir
  • 站点配置目录(site_config_dir
  • 用户日志目录(user_log_dir

而且:

  • 是单个模块,因此其他python包可以包含它们自己的私有副本
  • 对使用的目录名有点自以为是。寻找“意见” 应用意见时的文档和代码。

一些示例输出

在Mac OS X上:

>>> 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'

在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'

在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'

AppDirs方便

>>> 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'

每个版本的隔离

如果您有多个版本的应用程序正在使用中 能够并排运行,那么您可能需要对这些 目录:

>>> 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更改日志

附录1.4.3

  • [pr 76]python 3.6无效的转义序列不推荐修复程序
  • 修复Python3.6支持

附录1.4.2

  • [PR 84]允许在没有安装工具的情况下安装
  • [pr 86]修复setup.py描述中的字符串分隔符
  • 添加Python3.6支持

附录1.4.1

  • [问题38]修复Windows PY3上的WinReg导入
  • [问题55]将appname设为可选

附录1.4.0

  • [PR 42]AppAuthor现在在Windows上是可选的
  • [问题41]在windows、mac和类unix平台上支持jython。窗户 支持需要JNA
  • [PR 44]修复站点配置目录方法的错误行为

附录1.3.0

  • [Unix,第16版]符合XDG标准,而不是因为 所有人
  • [Unix]删除了对案例的无端损坏,因为*nix es是 通常区分大小写,因此弄脏不是明智之举
  • [unix]修复了site_data_dir中完全错误的行为,返回result 基于xdg_数据指令,为遵守 指定xdg_data_dirs是一个多值变量
  • [第6期]根据 xdg specs;在windows和mac上返回相应的*_data_dir

附录1.2.0

  • [unix]将user_log_dir放在unix上的cache目录下。似乎更多 典型的。
  • [第9期]让unicode在py3k上工作。

附录1.1.0

  • [第4期]添加AppDirs.user_log_dir

  • [unix,第2期,第7期]appdirs现在符合XDG base directory spec

  • [Mac,问题5]修复Mac上的site_data_dir()

  • [Mac]放弃使用“碳”模块,转而使用硬编码路径;支持 现在是Python3号。

  • 默认情况下,[windows]将“cache”追加到windows上的user_cache_dir。使用 opinion=False禁用此选项。

  • 添加appdirs.AppDirs便利类。用法:

    >>> dirs = AppDirs("SuperApp", "Acme", version="1.0")
    >>> dirs.user_data_dir
    '/Users/trentm/Library/Application Support/SuperApp/1.0'
    
  • [Windows]Cherry选择Komodo的更改将路径降级到Windows Short 路径(如果有高位字符)。

  • [linux]将linux上的默认值user_cache_dir()更改为单数,例如。 “~/.superapp/cache”。

  • [Windows]将^{TT22}$选项添加到^{TT23}$(仅用于Windows) 并将默认的user_data_dir行为更改为使用non-漫游 配置文件目录(CSIDL_LOCAL_APPDATA而不是CSIDL_APPDATA)。为什么?因为 大型漫游配置文件可能会导致登录速度问题。“只有在 “注销”行为可能会导致AppData信息出现意外。

AppDirs 1.0.1(从未发布)

于2010年7月27日开始此更改日志。在此之前,这个模块起源于 Komodo产品为applib.py,然后 作为applib/location.py(由 PyPMActivePython中。这基本上是 applib.py 1.0.1和applib/location.py 1.0.1。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaCenter是JavaFX2中不可执行的窗格   java Docker将容器连接到本地数据库   java无法通过Spring从Redis获得正确的值   java为什么要将数组转换为列表再转换为数组   Java泛型在方法中放入字符串或整数参数   在Cloud Bigtable SDK中找不到java类   java Mavensiteplugin无法加载生成的源(Jaxb)   java GWT序列化和Appengine通道Api   PrintWriter out=new PrintWriter(sWriter)和PrintWriter out=response之间的java差异。getWriter()   空手道DSL中的javascript,在java参数调用中传递变量时如何转义单引号   windows 64位java可以与32位tomcat一起使用   为for循环| Java输入参数   java您可以更改SWT选项卡项的背景和/或前景颜色吗?   用java生成6位pin码   java如何从另一个通量中排除通量中的所有元素   java无法调用“javafx.scene.control.ComboBox.getItems()”,因为“Controller.getMyBox()”的返回值为null   将Java字符串与数组匹配时出现问题   java如何使用HttpsUrlConnection对SSL连接使用代理身份验证?   java如何检查XML元素是否包含CDATA?