Монорепозиторий для pip-пакетов#
📦 Как устроен монорепозиторий с несколькими пакетами#
Структура будет вот такая:
my_python_packages/
├── packages/
│ ├── nlp/
│ │ ├── nlp/
│ │ │ ├── __init__.py
│ │ │ ├── cleaner.py
│ │ │ └── tokenizer.py
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ └── LICENSE
│ │
│ ├── datacleaner/
│ │ ├── datacleaner/
│ │ │ ├── __init__.py
│ │ │ ├── normalize.py
│ │ │ └── standardize.py
│ │ ├── pyproject.toml
│ │ ├── README.md
│ │ └── LICENSE
│ │
│ └── another_package/
│ └── ...
│
├── README.md # общее описание монорепозитория
└── requirements.txt # (если нужно) общее окружение для разработки
👉 То есть:
Ккаталог
packages/, а внутри него каждый отдельный пакет в своей папке.У каждого пакета — свой
pyproject.toml, свои исходники и своя сборка.
⚙️ Как собирать и устанавливать пакеты#
Перейти в папку нужного пакета, например:
cd packages/nlp
Собрать:
python -m build
Установить локально:
pip install dist/nlp-0.1.0-py3-none-any.whl
То же самое для datacleaner, another_package, и так далее.
🛠️ Альтернативно — установка в режиме разработки#
Если ты работаешь над проектами одновременно и хочешь видеть все изменения на лету:
В корне my_python_packages/ сделай:
pip install -e packages/nlp
pip install -e packages/datacleaner
Флаг -e означает editable mode, так что любые изменения в исходниках сразу видны без переустановки.
🔥 Плюсы такой схемы#
Легко держать вместе родственные проекты (например,
nlp,datacleaner,mltools).Можно разрабатывать и выпускать версии независимо для каждого пакета.
Легче собирать общее окружение для разработки (через один
requirements.txt).Хорошо работает с git.