Настройка приватного PyPI Registry (devpi) для Python-команд

Когда внутренних Python-библиотек становится много, их хранение и раздача через pip превращаются в хаос с версиями и зависимостями. Мы настраиваем приватный PyPI Registry на базе devpi — лёгкого и быстрого сервера, который централизует ваши пакеты и кэширует публичные, ускоряя сборки CI/CD. Наша команда реализует проект под ключ — от развёртывания до поддержки, обеспечивая стабильную работу и масштабирование вместе с вашим бизнесом.
Часто задаваемые вопросы

Отметим: когда в Python-команде растёт число внутренних библиотек — утилиты, SDK для API, инструменты аналитики — их нужно централизованно хранить и раздавать через pip install. Копировать .whl файлы по сети или хранить в репозитории — прямой путь к хаосу с версиями и зависимостями. Приватный PyPI-реестр решает эту проблему: без него каждая новая сборка CI/CD рискует получить несовместимую версию зависимости, а время сборки растёт из-за повторных скачиваний.

Мы разворачиваем devpi — легковесный Python-сервер, совместимый с PyPI. В отличие от тяжёлого Nexus (требует 4+ GB RAM и JVM), devpi работает на 256 MB RAM и одном CPU. Он не только хранит ваши пакеты, но и кэширует публичные, ускоряя CI и экономя трафик. Ниже — как это работает на практике.

Как devpi помогает ускорить CI/CD?

Представьте: ваш CI-пайплайн при каждой сборке скачивает pandas, requests и scikit-learn с pypi.org. Это занимает минуты и зависит от внешнего канала. С devpi первый раз пакеты загружаются с PyPI, а затем берутся из локального кэша. Для команды из 50 разработчиков экономия времени сборки достигает 70%, а трафика — до $200 в месяц (при стоимости $0.12/GB). При масштабировании на 100+ разработчиков среднемесячная экономия составляет от $300 до $500.

Готовый docker-compose.yml для быстрого старта
services:
  devpi:
    image: muccg/devpi:latest
    container_name: devpi
    ports:
      - "3141:3141"
    volumes:
      - devpi-data:/data
    environment:
      - DEVPI_SERVERDIR=/data
    command: devpi-server --host 0.0.0.0 --port 3141 --serverdir /data
    restart: unless-stopped
volumes:
  devpi-data:

После запуска инициализируем сервер и создаём индекс с upstream на PyPI:

devpi use http://devpi.company.ru:3141
devpi login root --password=""
devpi user -m root password=SecureRootPass
devpi user -c deploy password=DeployPass
devpi login deploy
devpi index -c company/prod bases=root/pypi volatile=False
devpi use company/prod

Параметр volatile=False запрещает удаление загруженных пакетов — критично для воспроизводимых сборок.

Публикация внутренних пакетов

Для публикации используем twine. Пример конфигурации пакета:

[project]
name = "company-utils"
version = "1.2.0"
description = "Internal utilities"

[build-system]
requires = ["setuptools>=68", "wheel"]
build-backend = "setuptools.backends.legacy:build"

Команды сборки и загрузки:

python -m build
twine upload --repository-url http://devpi.company.ru:3141/company/prod/ --username deploy --password ${DEVPI_PASSWORD} dist/*

В GitLab CI это выглядит так:

publish-pypi:
  image: python:3.12-slim
  script:
    - pip install build twine
    - python -m build
    - twine upload --repository-url ${DEVPI_URL}/company/prod/ --username deploy --password ${DEVPI_PASSWORD} dist/*
  only:
    - tags

Почему devpi выигрывает у Nexus для Python-команд?

Devpi разворачивается в 3 раза быстрее Nexus и потребляет в 6 раз меньше памяти. Сравнение:

Критерий Devpi Nexus
Размер и сложность Лёгкое Python-приложение Тяжёлая Java (требует JVM)
Поддерживаемые форматы Только PyPI Maven, npm, Docker, PyPI и др.
Кэширование Встроенное, дедупликация Есть, но общее хранилище
Время развёртывания 1–2 часа (Docker) 3–5 часов (с настройкой)
Потребление ресурсов 256 MB RAM, 1 CPU 4+ GB RAM, 2+ CPU

Для чисто Python-команды devpi выигрывает по простоте и ресурсам. По данным документации devpi и отзывам пользователей.

Что входит в работу по настройке devpi под ключ

  • Установка devpi в Docker или на bare metal с персистентным хранилищем.
  • Настройка SSL через nginx (HTTPS обязателен в корпоративной среде). Включаем Let's Encrypt.
  • Создание индексов: продовый с кэшем PyPI и девовый для тестов.
  • Генерация pip.conf для разработчиков (Linux/macOS/Windows).
  • Шаблон CI-пайплайна (GitLab CI / GitHub Actions) для публикации пакетов.
  • Предзагрузка популярных пакетов в кэш для air-gapped сред.
  • Документация и обучение команды (1–2 часа).
  • Поддержка после внедрения: мониторинг здоровья, бекап, обновление версий.

Типичные результаты внедрения:

Показатель До внедрения После внедрения
Время установки пакетов в CI 2–5 мин 10–30 сек
Использование трафика 5–10 GB/мес 1–2 GB/мес
Воспроизводимость сборок 90% 99.9%
Время на публикацию пакетов 30 мин 5 мин

Процесс работы

  1. Анализ: аудит существующих пакетов, требования к индексам, политика версионирования.
  2. Проектирование: схема индексов, ролевая модель, зеркалирование.
  3. Развёртывание: настройка сервера, SSL, reverse proxy (nginx).
  4. Интеграция: подключение CI/CD, настройка pip, тестирование.
  5. Передача: инструкции, доступы, обучение.

Сроки и стоимость

Ориентировочно: от 1 до 3 дней на базовое внедрение. Стоимость рассчитывается индивидуально в зависимости от сложности инфраструктуры и необходимого SLA. Получите консультацию для точной оценки вашего проекта — мы подберём конфигурацию под вашу инфраструктуру.

Практический опыт

За годы практики мы развернули devpi для 20+ компаний — от стартапов с одной командой до enterprise с сотнями разработчиков. Гарантируем стабильную работу: MTTR инцидентов не превышает 2 часов. Используем GitOps-подход для управления конфигурацией и автоматические тесты при публикации. Снижение затрат на CI/CD инфраструктуру на 20–30% — типичный результат.

Закажите настройку приватного PyPI Registry — избавитесь от хаоса с Python-пакетами и получите надёжную систему, которая экономит часы разработчиков каждый день. Свяжитесь с нами, чтобы обсудить детали проекта.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    815
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139