Твърдо кодираните конфигурации са ужасна идея. Вместо това помислете за тази алтернатива

Търсенето и заместването на стойности в стотици файлове на Python е дори по-малко забавно, отколкото си мислите. Наличието на един централен конфигурационен файл прави настройването на URL адреси на API, връзки към бази данни и други много по-лесно. Днес ще научите как да направите вашите приложения на Python много по-стабилни с конфигурационните файлове на YAML.

И така, какво е YAML? YAML означава Още един език за маркиране. Това е език за сериализиране на данни, често използван при писане на конфигурационни файлове. Той е популярен в много езици за програмиране, защото е супер лесен за четене. Други файлови формати, като JSON, също могат да се четат от хора, но не могат да съответстват на простотата, която предлага YAML.

Днес ще научите как да четете и пишете YAML файлове в Python и много повече. Но първо, нека инсталираме нещото.

Как да инсталирате YAML Python библиотека

YAML не се доставя с Python, така че ще трябва да го инсталираме. Командата за инсталиране варира в зависимост от това дали използвате Pip или Anaconda. Ето команда за инсталиране и за двете:

Пип:

pip install PyYAML

Анаконда:

conda install -c conda-forge -y pyyaml

И това е всичко, от което се нуждаем, за да започнем да работим с YAML файлове в Python.

Как да четете YAML конфигурационни файлове в Python

Създадох нова папка с два файла:

  • app.py - Съдържа Python код за днес.
  • config.yaml - Съдържа конфигурационни данни, които не искаме да кодираме твърдо в скриптове на Python.

Що се отнася до съдържанието на YAML файла, мислете за тях като двойки ключ-стойност. Днес ще комуникираме с отдалечен REST API, така че конфигурационният файл ще съдържа крайната точка на API и локалните пътища, където ще се записват данните:

api_url: https://gorest.co.in/public/v2/users
save_dir: /Users/dradecic/Desktop/users_data
save_file: users.json

Конфигурационният файл е много по-четлив от JSON, защото се отървахме от всички фигурни скоби и вдлъбнатини.

Но как можете да прочетете този файл в Python? Четенето на YAML файл в Python се извършва най-добре със синтаксиса на контекстния мениджър. Методът yaml.load() ще анализира съдържанието на файла и ще го съхрани като обект на речник на Python:

import yaml

with open("config.yaml", "r") as f:
    config = yaml.load(f, Loader=yaml.FullLoader)
print(config)

Можете да стартирате горния код от обвивката - ето какво ще видите:

Конфигурацията се съхранява като двойки ключ-стойност, което означава, че достъпът до стойности ще бъде изключително лесен. Преди да го направим, нека проучим и как да пишете в YAML файлове от Python.

Как да запазите YAML конфигурационни файлове в Python

Оградете конфигурационните данни в тройни кавички, ако искате да запазите YAML конфигурационните файлове от Python. Кодът по-долу ви показва как да съхранявате две обикновени двойки ключ-стойност и друг ключ, който има списък като стойност:

import yaml

yml_config = """key: value
another_key: another value
list_of_keys:
- value 1
- value 2
- value 3
"""
with open("configw.yaml", "w") as f:
    f.write(yml_config)

Съответният YAML файл изглежда така:

От тук го прочетете, както е описано в предишния раздел.

Как да използвате YAML конфигурационни файлове в приложения на Python

Сега ще направим малък Python скрипт, който се свързва с отдалечен REST API и изтегля данните във формат JSON. Вече имаме URL адреси и пътища във файла config.yaml - просто не забравяйте да актуализирате пътя, за да съответства на вашата операционна система.

Кодовият фрагмент по-долу прави GET заявка към крайната точка на API и запазва отговора локално. Той също така създава структурата на директорията, ако не съществува:

import json
import yaml
import pathlib
import requests

with open("config.yaml", "r") as f:
    config = yaml.load(f, Loader=yaml.FullLoader)

def get_users() -> dict:
    r = requests.get(config["api_url"])
    return r.text

def save_users(users: dict) -> None:
    path = pathlib.Path(config["save_dir"])
    if not path.exists():
        path.mkdir()
    with open(f"{config['save_dir']}/{config['save_file']}", "w") as f:
        json.dump(users, f)

if __name__ == "__main__":
    users = get_users()
    save_users(users=users)

По-долу ще видите съдържанието на директорията users_data:

Ето как можете да интегрирате конфигурационните файлове на YAML във вашите Python проекти. Нека направим кратко обобщение.

Резюме на YAML конфигурационните файлове в Python

Твърдо кодирането на стойности никога не е добра идея. Разбира се, лесно е да промените няколко неща в един скрипт на Python, но си представете, че имате стотици от тях — лесно може да се превърне в кошмар и е почти гарантирано, че ще пропуснете няколко места.

Днес научихте как да работите с YAML конфигурационни файлове в Python. Цялата настройка е толкова лесна, колкото идва, но не е решение за всичко. Например, не можете да използвате програмна логика в YAML файлове. Единственото решение е да включите логиката в скриптове на Python, които генерират YAML файлове, но това просто не е удобно.

Този недостатък се отстранява лесно чрез използване на Python файлове за конфигуриране. Останете на линия, ако искате да научите повече за това.

Харесахте статията? Станете „среден член“, за да продължите да учите без ограничения. Ще получа част от вашия членски внос, ако използвате следната връзка, без допълнителни разходи за вас.



Препоръчително четиво

Останете свързани

Първоначално публикувано в https://betterdatascience.com на 11 април 2022 г.