Загрузка файла конфигурации из независимого места операционной системы в python - PullRequest
4 голосов
/ 15 июля 2010

под Linux я помещаю свои конфиги в "~ / .programname". Где я должен разместить его в окнах? Каков будет рекомендуемый способ открытия файла конфигурации ОС, независимой в python?

Спасибо! Nathan

Ответы [ 4 ]

9 голосов
/ 15 июля 2010

В Windows вы храните его в os.environ['APPDATA'].Однако в Linux теперь рекомендуется хранить конфигурационные файлы в os.environ['XDG_CONFIG_HOME'], по умолчанию ~/.config.Так, например, основываясь на примере JAB:

if 'APPDATA' in os.environ:
    confighome = os.environ['APPDATA']
elif 'XDG_CONFIG_HOME' in os.environ:
    confighome = os.environ['XDG_CONFIG_HOME']
else:
    confighome = os.path.join(os.environ['HOME'], '.config')
configpath = os.path.join(confighome, 'programname')

Стандарт базового каталога XDG был создан для того, чтобы все конфигурации можно было хранить в одном месте, не загромождая ваш домашний каталог точечными файлами.Большинство новых приложений для Linux поддерживают это.

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

Попробуйте:

os.path.expanduser('~/.programname')

В Linux это вернется:

>>> import os
>>> os.path.expanduser('~/.programname')
'/home/user/.programname'

В Windows это вернется:

>>> import os
>>> os.path.expanduser('~/.programname')
'C:\\Documents and Settings\\user/.programname'

Что немного уродливо,так что вы, вероятно, захотите сделать это:

>>> import os
>>> os.path.join(os.path.expanduser('~'), '.programname')
'C:\\Documents and Settings\\user\\.programname'

РЕДАКТИРОВАТЬ: Для чего стоит, следующие приложения на моем компьютере с Windows создают свои папки конфигурации в моей папке Documents and Settings\user:

  • Android
  • AgroUML
  • Gimp
  • IPython

РЕДАКТИРОВАТЬ 2: Ого, я только что заметил, вместо /user/.programname/home/user/.programname для примера Linux.Исправлено.

1 голос
/ 09 ноября 2018

Некоторые улучшения по сравнению с Отличный ответ LeadStorm :

Код может быть проще, используя os.environ.get() и короткое замыкание or:

configpath = os.path.join(
    os.environ.get('APPDATA') or
    os.environ.get('XDG_CONFIG_HOME') or
    os.path.join(os.environ['HOME'], '.config'),
    "programname"
)

Кроме того, если вы хотите использовать внешние библиотеки, пакет xdg может еще больше упростить работу в Linux и Mac:

import xdg.BaseDirectory as xdg
configpath = os.path.join(os.environ.get('APPDATA') or xdg.xdg_config_home,
                          "programname")

Но это решает только часть вашей проблемы: вам все еще нужно создать этот каталог, если он не существует, верно?

В Windows вы одни. Но в Linux и Mac xdg.save_config_path() do os.path.join() для вас и создают каталог с соответствующими разрешениями, если необходимо, и возвращают его путь, все за один шаг. Удивительный!

if 'APPDATA' in os.environ:
    configpath = os.path.join(os.environ['APPDATA'], "programname")
    os.makedirs(configpath, exist_ok=True)
else:
    configpath = xdg.save_config_path("programname")
0 голосов
/ 15 июля 2010

Как правило, файлы конфигурации и данных для программ в Windows находятся в каталоге% APPDATA% (или должны), обычно в подкаталоге с названием программы.Конечно, «% APPDATA%» - это просто переменная среды, которая отображается в папку «Данные приложения» текущего пользователя.Я не знаю, существует ли он в Linux (хотя я предполагаю, что это не так), так что делать это на разных платформах (Windows / Linux / MacOS)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...