Petrovich
Склонение русских имён, фамилий и отчеств по падежам. Python 3.12 и новее. Библиотека использует общие правила Petrovich и работает без сети и без дополнительных runtime-зависимостей.
Новая реализация разрабатывается в petrovich_2. Ветка legacy/1.x сохраняет
исходный код на момент начала миграции; master и существующие теги не изменены.
Новая версия — 3.0.0. Прежняя версия 2.0.1 для Python 3.6+ остаётся в PyPI.
Установка
Из рабочей копии ветки petrovich_2:
python -m pip install .
После публикации стабильной версии в PyPI:
python -m pip install 'petrovich>=3,<4'
Для старого приложения на Python 2 закрепите petrovich==1.0.0,
для прежней реализации на Python 3.6+ — petrovich==2.0.1.
См. миграцию и процесс разработки.
Использование
from petrovich import Petrovich, Case, Gender
p = Petrovich()
print(p.lastname("Алексеев", Case.GENITIVE, Gender.MALE)) # Алексеева
print(p.firstname("Анна-Мария", Case.DATIVE, Gender.FEMALE)) # Анне-Марии
print(p.middlename("Васильевич", Case.INSTRUMENTAL)) # Васильевичем
Методы firstname, lastname, middlename принимают имя в именительном падеже,
целевой Case и необязательный Gender. Поддерживаются GENITIVE, DATIVE,
ACCUSATIVE, INSTRUMENTAL, PREPOSITIONAL и NOMINATIVE.
Gender.MALE и Gender.FEMALE задают род явно; общие правила ANDROGYNOUS
применяются к обоим родам. Без рода используется эвристика порядка правил;
это не полноценное определение пола. Для неоднозначных имён задавайте род явно.
Пробелы и дефисы сохраняются, исключения применяются к каждому компоненту.
Слова в верхнем регистре остаются в верхнем регистре. Неизвестные слова
возвращаются без изменения, если подходящих правил нет. Пустое значение
вызывает ValueError, значение не строкового типа — TypeError.
Правила и CLI
В wheel и sdist включён проверенный снимок правил; Git submodule не нужен.
По умолчанию загрузка локальная. Источник и SHA-256 снимка записаны в
src/petrovich/data/PROVENANCE.json, лицензия — рядом.
petrovich rules validate
petrovich rules update --output ./rules.json --ref master
petrovich rules validate ./rules.json
petrovich inflect lastname Алексеев --case genitive --gender male
petrovich inflect firstname Пётр --case dative --rules ./rules.json
Для воспроизводимого обновления укажите SHA коммита вместо master.
Без --ref используется зафиксированный в библиотеке коммит.
Возможны --url https://.../rules.json, --sha256 HEX и --timeout 30.
--ref и --url взаимоисключающие. Размер документа ограничен 2 MiB.
CLI возвращает 0 при успехе, 1 при ошибке загрузки/валидации и 2 при неверных аргументах.
Эквивалентная точка входа: python -m petrovich.
Обновление проверяет документ до атомарной замены файла. Ошибка сети, JSON,
контрольной суммы или записи оставляет прежний файл на месте. Пакет в
site-packages автоматически не изменяется. Чтобы использовать обновление:
p = Petrovich(rules_path="./rules.json")
Созданный экземпляр хранит неизменяемый снимок правил. После обновления файла создайте новый экземпляр. Конкурентные обновления одного файла координирует приложение: действует последнее завершённое обновление.
Асинхронный ввод-вывод
import asyncio
from petrovich import Petrovich, Case
from petrovich.rules import aupdate_rules
async def main():
await aupdate_rules("./rules.json")
p = await Petrovich.create("./rules.json")
print(p.firstname("Павел", Case.GENITIVE))
asyncio.run(main())
aload_rules, aupdate_rules и Petrovich.create выносят файловый и сетевой
ввод-вывод в рабочий поток через asyncio.to_thread. Отмена coroutine не прерывает
операцию потока: обновление может завершиться после отмены.
Склонение — короткая синхронная операция без ввода-вывода. Для больших пакетов
данных приложение может использовать asyncio.to_thread или пул процессов.
Разработка
python -m pip install -e '.[dev]'
python -m pytest --cov=petrovich --cov-branch
ruff check .
ruff format --check .
mypy
python -m build
python -m twine check --strict dist/*
GitHub Actions проверяет Python 3.12, 3.13 и 3.14, собирает wheel/sdist и публикует защищённые релизные теги в PyPI через Trusted Publishing. Также сохранена конфигурация GitLab CI. Настройка доступа и Git flow описаны в docs/development.md.
Лицензия кода и правил — MIT.
Metadata
Release files for Petrovich 3.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| petrovich-3.0.0.tar.gz | 26.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| petrovich-3.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 39.9 kB
Release files / petrovich-3.0.0.tar.gz
| Download URL | petrovich-3.0.0.tar.gz |
|---|---|
| Size | 26.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
53b24abaad77a0c694f3293bc6e14d65ea4ef5286619ffa0dfc5e38afbe74e50
|
|
BLAKE2b-256 checksum How to use checksums |
efa022be8078a0d268b08c2db2930dac75778c6011e590ac6639447faef702f7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.
Transparency logRelease files / petrovich-3.0.0-py3-none-any.whl
| Download URL | petrovich-3.0.0-py3-none-any.whl |
|---|---|
| Size | 13.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
951f48fac01f91e2d8bdd0655fcb13295c0852a0b68f835698da6e3dbccbab31
|
|
BLAKE2b-256 checksum How to use checksums |
56ec72ac3af6c30ba85283b24d28ff32061c8460c228fb429c5083b70fcf63c7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.
Transparency log