Python 我应该如何在~/.config或类似文件中创建和读取用户可编辑的配置文件?
我正在计划一个命令行Python应用程序,我打算通过PyPi发布它 当应用程序与pip一起安装时,我想在用户文件系统的适当位置创建一个用户可编辑的配置文件 例如,在Ubuntu中,该文件类似于~/.config/foo/config.ini 在安装时,我希望创建该文件(如果可能的话),并能够指定另一个配置文件来代替命令行参数Python 我应该如何在~/.config或类似文件中创建和读取用户可编辑的配置文件?,python,packaging,pypi,Python,Packaging,Pypi,我正在计划一个命令行Python应用程序,我打算通过PyPi发布它 当应用程序与pip一起安装时,我想在用户文件系统的适当位置创建一个用户可编辑的配置文件 例如,在Ubuntu中,该文件类似于~/.config/foo/config.ini 在安装时,我希望创建该文件(如果可能的话),并能够指定另一个配置文件来代替命令行参数 完成这项工作的通常方案是什么 我认为PyPI上的appdirs包是您所需要的,不是吗?像这样的项目(从中派生)可以帮助完成这样的任务。它实现了 但不要在安装时创建文件。最好
完成这项工作的通常方案是什么 我认为PyPI上的
appdirs
包是您所需要的,不是吗?像这样的项目(从中派生)可以帮助完成这样的任务。它实现了
但不要在安装时创建文件。最好在实际需要时创建该文件,例如,这可能是在应用程序的第一次运行期间
类似于以下内容的内容可以让您开始使用配置目录:
>>> import appdirs
>>> appdirs.user_config_dir('foo')
'/home/sinoroc/.config/foo'
或者,如果没有外部依赖,它可能大致如下所示:
#!/usr/bin/env python3
import argparse
import os
import pathlib
import platform
def get_config_file_path(project_name, file_name):
path = None
config_path = None
platform_system = platform.system()
if platform_system == 'Windows':
if 'APPDATA' in os.environ:
config_path = pathlib.Path(os.environ['APPDATA'])
else:
config_path = pathlib.Path.home().joinpath('AppData', 'Roaming')
elif platform_system == 'Linux':
if 'XDG_CONFIG_HOME' in os.environ:
config_path = pathlib.Path(os.environ['XDG_CONFIG_HOME'])
else:
config_path = pathlib.Path.home().joinpath('.config')
if config_path:
path = config_path.joinpath(project_name, file_name)
return path
def main():
default_config_file_path = get_config_file_path('foo', 'config.ini')
args_parser = argparse.ArgumentParser()
args_parser.add_argument(
'--config', '-c',
default=str(default_config_file_path),
type=argparse.FileType('r'),
)
args = args_parser.parse_args()
if __name__ == '__main__':
main()
您应该为此使用该模块,因为它可以可靠地处理不同平台之间的差异:
>>> from appdirs import user_config_dir
>>> appname = "SuperApp"
>>> appauthor = "Acme"
>>> user_config_dir(appname)
'/home/trentm/.config/SuperApp'
程序可以在第一次运行时创建文件。只是别忘了创建目录。如果目录不存在,则无法创建文件。