Кроссплатформенная адресация файла конфигурации - PullRequest
9 голосов
/ 12 июля 2010

Простой случай

У меня есть программа на Python, которую я намереваюсь поддерживать в системах * nix и Windows.Программа должна быть настраиваемой, по крайней мере, глобально.Есть ли кроссплатформенный способ обращения к файлу конфигурации?

Т.е. я хочу написать вместо

import platform
if platform.system() == "Windows":
    configFilePath = "C:\MyProgram\mainconfig.ini"
else:
    configFilePath = "/etc/myprogram/mainconfig.ini"

что-то вроде

import configmagic
configFile = configmagic("myprogram", "mainconfig")

Несколько более сложный случай

Может ли то же самое быть применено к пользовательской конфигурации?Т.е. сохранить конфигурацию в ~user/.myprogram/ под Unix и в HKEY_LOCAL_USER разделе реестра под Windows?

Ответы [ 2 ]

4 голосов
/ 12 июля 2010

Python разрешает использовать прямую косую черту в Windows, а os.path.expanduser работает и в Windows, поэтому вы можете получить путь к файлу для пользователя, используя:

config_file = os.path.expanduser("~/foo.ini")

, если вы хотите найти .ini в домашнем каталоге пользователя. Я не уверен, как объединить файлы на основе .ini и параметры реестра.

2 голосов
/ 27 августа 2013

Вы можете использовать dirspec. Работает в GNU / Linux, Mac OS и Windows.

Вы можете получить его из: Панель запуска

Или установка из PyPI

pip install dirspec

и в вашем коде используйте что-то вроде:

from dirspec.basedir import get_xdg_config_home
config_path = get_xdg_config_home()

Он используется Ubuntu One, посмотрите на этот пример кода из их документации: https://one.ubuntu.com/developer/data/u1db/tutorial#storing-and-retrieving-tasks

...