Монорепозиторий для 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, свои исходники и своя сборка.


⚙️ Как собирать и устанавливать пакеты#

  1. Перейти в папку нужного пакета, например:

    cd packages/nlp
    
  2. Собрать:

    python -m build
    
  3. Установить локально:

    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.