gpt4 book ai didi

python - 使用配置文件打包 python 应用程序?

转载 作者:行者123 更新时间:2023-12-04 03:31:20 29 4
gpt4 key购买 nike

我正在编写一个 Python CLI 应用程序并想打包它。我需要应用程序有一个适用于整个“安装”的配置文件(即无论用户从何处调用我的 CLI 应用程序,它都需要读取此配置文件)。

我希望它位于包安装目录中,而不仅仅是文件系统中的某个任意位置(如果我可以避免的话)。执行此操作的简洁方法是什么?

最佳答案

很抱歉给出“那不是你想要做的”答案,但我强烈建议不要将可编辑的配置文件捆绑到你的包中。原因是:

  • 任何严肃的操作系统都有明确定义的标准,用户级或系统级配置应该遵循这些标准。将应用的配置也放在那里一点也不麻烦。
  • Python 包(读取,.wheel 文件)不需要解压缩即可运行,因此任何支持 python 的操作系统都可能选择在安装时不解压缩。如果你想编辑里面的配置,你需要先解压包,这有点不方便。
  • 同理,用搜索工具也找不到配置。如果您的用户忘记了它在哪里,那么祝他们好运。
  • 最后也是最不重要的一点是,假设可执行文件是静态的。在代码被编译的其他语言中,没有办法不编译,但对于解释型语言,我认为效仿它是一种很好的风格。

但遵循标准的最佳论据通常是您可以使用支持所述标准的编写良好的工具,在本例中为 appdirs .它可以(除其他外)为您找到通用的配置目录,因此使用它就像这样简单:

from pathlib import Path
from appdirs import site_config_dir
from configparser import ConfigParser


def load_config():
# .ini is easiest to work with, but .toml is probably better in the long run
cfg_loc = Path(site_config_dir(appname="my_cli_app", appauthor="K4KFH")) / "config.ini"
# that's it, that was the magic. the rest of the code here is just for illustration

if not cfg_loc.exists():
cfg_loc.parent.mkdir(parents=True, exist_ok=True)
with open(config_loc) as f:
f.write(
"[basic]\n"
"foo = 1\n"
)
print(f"Initialized new default config at {config_loc}.")

cfg = ConfigParser()
cfg.read(cfg_loc)
return cfg

在 Windows 上,它会给你这个:

>>> cfg = load_config()
Initialized new default config at C:\ProgramData\K4KFH\my_cli_app\config.ini.
>>> cfg["basic"]["foo"]
1

在 debian buster 上:

>>> cfg = load_config()
Initialized new default config at /etc/xdg/my_cli_app/config.ini.
>>> cfg["basic"]["foo"]
1

关于python - 使用配置文件打包 python 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66766649/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com