Как настроить управление пакетами PyPI с помощью Nexus Repository
Содержание
OverviewОбзор типов репозиториевТипичная архитектураТребованияСоздание PyPI Proxy репозиторияСоздание PyPI Hosted репозиторияСоздание PyPI Group репозиторияИспользование Nexus репозитория с Python клиентомСценарий 1: Загрузка в hosted репозиторий с помощью twineСценарий 2: Загрузка и установка пакетов с помощью pip из PyPI Group репозиторияНастройка pip для анонимного доступаНастройка pip для аутентифицированного доступаПримечания по конфигурацииOverview
Python Package Index, или PyPI, — это огромный репозиторий открытых Python-пакетов, предоставляемых всемирным сообществом разработчиков Python. Официальный индекс доступен по адресу https://pypi.org, а сам сайт поддерживается Python Software Foundation.
Nexus Repository поддерживает проксирование Python Package Index. Это позволяет использовать пакеты из официального Python Package Index без повторных загрузок, что сокращает время и трафик при доступе к Python-пакетам.
Кроме того, вы можете публиковать свои пакеты в приватном индексе в виде hosted-репозитория и объединять удалённые и приватные репозитории в группу репозиториев, которая объединяет и предоставляет содержимое нескольких репозиториев по одному удобному URL.
Обзор типов репозиториев
PyPI Proxy — действует как прокси для удалённых PyPI-репозиториев (например, https://pypi.org), кэшируя пакеты локально для более быстрого доступа и снижения использования трафика. При запросе пакета сначала проверяется локальный кэш, и если пакет не найден, он загружается из удалённого репозитория и кэшируется локально.
PyPI Hosted — хранит пакеты, загруженные непосредственно в ваш экземпляр Nexus. Обычно используется для приватных пакетов, внутренних библиотек или пакетов, которыми вы хотите полностью управлять.
PyPI Group — объединяет несколько PyPI-репозиториев (proxy, hosted или другие группы) в один логический репозиторий. При запросе пакета из группы Nexus последовательно ищет пакет в репозиториях-участниках в заданном порядке, пока пакет не будет найден. Примечание: репозиторий PyPI Group используется только для загрузки PyPI-пакетов, а не для их публикации.
Типичная архитектура
Распространённая конфигурация включает:
- PyPI Hosted — для приватных/внутренних пакетов
- PyPI Proxy — для кэширования публичных пакетов с PyPI.org
- PyPI Group — объединяет hosted и proxy репозитории, предоставляя единый точечный доступ
Такая архитектура позволяет клиентам использовать один URL репозитория для бесшовного доступа как к приватным, так и к публичным пакетам.
Требования
- Экземпляр Nexus развернут, и вы вошли в систему с учетными данными администратора.
- Локально установлен Python с доступным менеджером пакетов pip.
Создание PyPI Proxy репозитория
Если вы хотите использовать PyPI Proxy для кэширования пакетов PyPI, необходимо создать PyPI Proxy репозиторий. Примечание: экземпляр nexus должен быть доступен из интернета.
Перейдите в интерфейс Nexus и выполните следующие шаги:
- Нажмите
Settings→Repositories→Create repository→PyPI (proxy) - Заполните параметры конфигурации и нажмите
Create repository
Параметры конфигурации:
- Name: введите имя репозитория, например,
pypi-proxy - Remote storage: укажите URL удалённого репозитория, например,
https://pypi.org - Storage: выберите подходящий тип хранилища в зависимости от ваших требований
Создание PyPI Hosted репозитория
Если вы хотите использовать PyPI Hosted для хранения пакетов PyPI, необходимо создать PyPI Hosted репозиторий.
Перейдите в интерфейс Nexus и выполните следующие шаги:
- Нажмите
Settings→Repositories→Create repository→PyPI (hosted) - Заполните параметры конфигурации и нажмите
Create repository
Параметры конфигурации:
- Name: введите имя репозитория, например,
pypi-hosted - Storage: выберите подходящий тип хранилища в зависимости от ваших требований
- Deployment policy: выберите
Allow redeployилиDisable redeployв зависимости от потребностей
Создание PyPI Group репозитория
Перейдите в интерфейс Nexus и выполните следующие шаги:
- Нажмите
Settings→Repositories→Create repository→PyPI (group) - Заполните параметры конфигурации и нажмите
Create repository
Параметры конфигурации:
- Name: введите имя репозитория, например,
pypi-group - Member repositories: выберите ранее созданные репозитории
pypi-proxyиpypi-hosted - Order: настройте порядок поиска по репозиториям в соответствии с вашими требованиями
Использование Nexus репозитория с Python клиентом
Перед выполнением следующих сценариев получите URL репозитория из веб-интерфейса Nexus. Нажмите Browse, выберите ранее созданный репозиторий и нажмите кнопку Copy, чтобы скопировать URL репозитория. Этот URL будет использоваться в примерах конфигурации ниже.
Сценарий 1: Загрузка в hosted репозиторий с помощью twine
Этот сценарий демонстрирует, как использовать PyPI Hosted репозиторий для деплоя и публикации собственных Python-пакетов в Nexus. Это особенно полезно для:
- Приватных пакетов: внутренних библиотек и приложений, которые не должны публиковаться в публичный PyPI
- Кастомных сборок: модифицированных версий публичных пакетов с вашими настройками
- Проприетарного ПО: коммерческих или конфиденциальных пакетов с контролируемым распространением
- Пакетов для разработки: предварительных версий для внутреннего тестирования и валидации
Процесс включает сборку Python-пакета, настройку цели деплоя и загрузку пакета в ваш Nexus PyPI Hosted репозиторий.
После успешной загрузки пакетов в PyPI Hosted репозиторий вы можете просматривать и управлять ими через веб-интерфейс Nexus: Browse → Выберите PyPI Hosted Repository → Browse Package Contents
Сценарий 2: Загрузка и установка пакетов с помощью pip из PyPI Group репозитория
Этот сценарий демонстрирует, как настроить pip для использования PyPI Group репозитория для управления зависимостями Python-пакетов. Это особенно полезно для:
- Унифицированного доступа к пакетам: использование одного URL репозитория для доступа как к публичным пакетам (через proxy), так и к приватным пакетам (через hosted)
- Оптимизации производительности: локальное кэширование часто используемых пакетов сокращает время загрузки и использование трафика
- Централизованного управления: все зависимости управляются через один экземпляр Nexus
- Контроля безопасности: централизованная аутентификация и контроль доступа к загрузкам пакетов
Процесс включает настройку pip для использования URL PyPI Group репозитория, который автоматически ищет и загружает необходимые пакеты из репозиториев-участников.
Настройка pip для анонимного доступа
Настройка pip для аутентифицированного доступа
Если в Nexus отключён анонимный доступ, необходимо добавить имя пользователя и пароль в файл pip.conf:
Примечания по конфигурации
- Специальные символы в паролях должны быть URL-кодированы (например,
@заменяется на%40) - Учитывайте вопросы безопасности при хранении учётных данных в открытом виде
- Всегда добавляйте
/simple/в конец URL репозитория - Если Nexus использует небезопасное соединение или недоверенный сертификат, настройте параметр
trusted-host