Найти в Дзене

[Python] Создаём базовую архитектуру проекта на python

Эта статья является первой из цикла статей Пишем свою библиотеку с нуля и публикуем её в PyPI (GitVerse) ОС: Windows 10 Язык: Python 3.14 Финальная программа будет иметь вот такую архитектуру. В этой статье мы не будем реализовывать всю архитектуру, но большую её часть. При создании указываю создать файлы README, LICENSE, .gitignore и папку .gitverse. Все эти файлы и папки создаются с уже заполненным текстом. В дальнейшем мы будем затирать их текст и указывать свой. Потом клонируем репозиторий на локальную машину. Во вкладке Код есть ссылки для клонирования репозитория. Я при клонировании использую токены. Вы же можете клонировать репозиторий как вам удобно. И сразу создаем новую ветку dev git checkout -b dev Будем работать в отдельной ветке. Создаем виртуальное окружение и устанавливаем нужные зависимости cd bnkc py -3.14 -m venv venv venv\Scripts\activate py -m pip install python-dateutil py -m pip install py-moneyed py -m pip install rich pip freeze > requirements.txt deactivate Я
Оглавление

Введение

Эта статья является первой из цикла статей Пишем свою библиотеку с нуля и публикуем её в PyPI (GitVerse)

Используемые технологии

ОС: Windows 10

Язык: Python 3.14

Архитектура программы

Финальная программа будет иметь вот такую архитектуру.

-2

В этой статье мы не будем реализовывать всю архитектуру, но большую её часть.

План работы

  • Создаем репозиторий в GitVerse
  • Создаем виртуальное окружение
  • Заполняем README.md
  • Заполняем LICENSE
  • Заполняем pyproject.toml
  • Заполняем .gitignore
  • Закладываем архитектуру папки bnkc
  • Сохраняем проект в репозитории

Создаем репозиторий в GitVerse

-3

При создании указываю создать файлы README, LICENSE, .gitignore и папку .gitverse. Все эти файлы и папки создаются с уже заполненным текстом. В дальнейшем мы будем затирать их текст и указывать свой.

Потом клонируем репозиторий на локальную машину. Во вкладке Код есть ссылки для клонирования репозитория.

-4

Я при клонировании использую токены. Вы же можете клонировать репозиторий как вам удобно.

-5

И сразу создаем новую ветку dev

git checkout -b dev

Будем работать в отдельной ветке.

Виртуальное окружение

Создаем виртуальное окружение и устанавливаем нужные зависимости

cd bnkc
py -3.14 -m venv venv
venv\Scripts\activate
py -m pip install python-dateutil
py -m pip install py-moneyed
py -m pip install rich
pip freeze > requirements.txt
deactivate

Я для работы будем использовать python 3.14 и установим 3 библиотеки, которые будут нужны в первую очередь. Потом будем добавлять другие

С помощью команды pip freeze мы создадим файл requirements.txt

Работаем с файлами проекта

Отложим разработку программы. Поработаем с другими важными файлами.

При создании репозитория были созданы файлы README и LICENSE, давайте их отредактируем.

Начнем с файла README.md

Добавим бэйджи и описание

# BNKC - Bank Calculator
[![Python 3.14+](https://img.shields.io/badge/python-3.14+-blue.svg)](https://www.python.org/)
[![MIT License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
[![Alpha Status](https://img.shields.io/badge/status-alpha-red.svg)](https://gitverse.ru/pytechnotes/bnkc)
Простая и удобная библиотека для расчета аннуитетных платежей.

Кратко укажем особенности

## Особенности
- Простой API
- Точные расчеты через Decimal
- Красивый вывод в консоль
## Требования
- Python 3.14+
## Зависимости
- rich>=14.3.2
- py-moneyed>=3.0
- python-dateutil>=2.9.0
## Лицензия
MIT License

В требованиях ставлю Python 3.14, я думаю, что можно указать и 3.13, но я не хочу тратить время на проверку кода на разных версиях python.

Укажем, как пользоваться программой (её еще нет, но будет работать примерно так)

## Установка
```bash
pip install bnkc
```
## Быстрый старт
```python
import bnkc
credit = bnkc.Credit(1000000,12.5,60)
schedule = credit.tab()
schedule.show()
```

Теперь исправим файл LICENSE

Как выбрать лицензию для своей программы - этому посвящено множество статей в интернете. Я тут предлагаю использовать самую распространенную лицензию - MIT. Это самая простая лицензия из всех возможных. Если упрощать, то она говорит: "Можешь делать с программой что хочешь".

При создании репозитория мы уже создали файл. В нем надо будет поправить только строку Copyright. Указываем нужный год и ФИО.

Copyright (c) 2025 Belousov Dmitry

Теперь создадим файл pyproject.toml

Это ключевой файл в проекте на python. Этот файл является настроечным для многих компонентов python.

Мы сейчас заполним этот файл информацией, но только общего характера. Потом в процессе разработки мы будем возвращаться к этому файлу и дописывать его.

Создадим блок project и укажем в нем базовую информацию по проекту.

[project]
name = "bnkc"
version = "1.0.0"
description = "Библиотека для расчета аннуитетных платежей по кредитам"
authors = [
{name = "Belousov Dmitry (DemonssTano)", email = "demonss11@yandex.ru"}
]
license = "MIT"
license-files = ["LICENSE"]
readme = "README.md"

Продолжение блока project. Укажем информацию, по которой можно будет найти в PyPI наш проект (хотя мы там публиковать не планируем, мы будем публиковать в GitVerse PyPI)

requires-python = ">=3.14"
keywords = ["bank", "annuity", "calculator"]
classifiers = [
"Development Status :: 3 - Alpha",
"Intended Audience :: Developers",
"Topic :: Software Development :: Libraries :: Python Modules",
"Programming Language :: Python :: 3.14",
]

Продолжение блока project. Укажем основные зависимости. Позже будем заполнять опциональные зависимости.

dependencies = [
"rich>=14.3.2",
"py-moneyed>=3.0",
"python-dateutil>=2.9.0",
]

Добавляем новый блок [project.urls] и указываем в нем расположение нашего проекта.

[project.urls]
Homepage = "https://gitverse.ru/pytechnotes/bnkc"
Repository = "https://gitverse.ru/pytechnotes/bnkc"
"Bug Reports" = "https://gitverse.ru/pytechnotes/bnkc/tasktracker"

Теперь давайте изучим файл .gitignore.

После создания репозитория, мы создали этот файл, и он заполнен всем необходимым для типичного python проекта. Но в нем есть очень много всего, что нам не надо. И как минимум я не знаю, с помощью каких редакторов вы разрабатываете библиотеку. Поэтому, чтоб не расписываться, что удалять, а что не удалять, оставим файл как есть.

Закладываем архитектуру папки bnkc

Давайте создадим папку bnkc (вложенная папка в проекте).

Прежде чем создадим .py файлы. Создадим файл py.typed

Этот файл ДОЛЖЕН быть пустым. Но он должен быть в проекте.

Суть этого файла в том, чтоб когда нашу библиотеку кто-то будет импортировать в свой проект, у нашей библиотеки была поддержка аннотации типов.

Без этого файла mypy в чужом проекте будет ругаться на нашу библиотеку. Поэтому, чтоб избежать этой проблемы, создадим файл.

Теперь давайте создадим нужную структуру файлов и папок:

  • файл: __init__.py
  • файл: __main__.py
  • папка: core
  • папка: utils

Внутри папок core и utils создадим файлы __init__.py

Все файлы оставляем (пока) пустыми.

Ключевой момент, который надо знать - файл __init__.py делает "пакет" из папки.

Сохраняем проект в репозитории

Если ранее забыли применить команду, применяем:

git checkout -b dev

Отправляем данные в удаленный репозиторий

git add .
git commit -m "первоначальная настройка проекта"
git push -u origin dev

На этом пока всё. Продолжение в следующей статье.

-6

Исходники проекта

- ee1b54d220409cd9ac590d889342249e4cdb04c5 - pytechnotes/bnkc - Gitverse

Подписывайтесь на Дзен, а также приглашаю в мой телеграмм канал, там публикую другой, но не менее интересный контент.