Как создать и использовать локальные репозитории для установки зависимостей с помощью `pip`?

Для создания локального репозитория можно использовать утилиту pip index или просто создать структуру каталогов с пакетами в формате wheel (.whl) или sdist (.tar.gz).

Создание структуры каталогов (простой способ):

  my_repo/
  ├── my_package_1-1.0.0-py3-none-any.whl
  ├── my_package_2-2.0.0.tar.gz
  └── ...
  

Использование локального репозитория с pip:

  • Через опцию --find-links или -f: pip install --find-links=file:///путь/к/my_repo my_package_1 my_package_2
  • Через файл pip.conf/pip.ini/pip.toml:
          [global]
          find-links =
              file:///путь/к/my_repo
          

Укажите абсолютный путь к локальному репозиторию (file:///...) или относительный, если он находится в той же директории, что и проект.


Создание и использование локальных репозиториев для установки зависимостей с помощью `pip` - это полезный навык, позволяющий управлять зависимостями в условиях ограниченного доступа к сети, повысить скорость установки пакетов или изолировать проекты.

Создание локального репозитория (простой индекс):

Самый простой способ создать локальный репозиторий - использовать простой индекс (simple index) пакетов Python. Это структура каталогов, где каждый каталог соответствует названию пакета, а внутри лежат файлы `.whl` (Python Wheel) или `.tar.gz` (исходный код пакета).

  1. Получите необходимые пакеты: Используйте `pip download` для скачивания нужных `.whl` или `.tar.gz` файлов. Например: pip download -d ./пакеты requests beautifulsoup4. Эта команда скачает пакеты `requests` и `beautifulsoup4` и сохранит их в папку `пакеты`. Папку `пакеты` можно заменить на любую другую.
  2. Создайте структуру каталогов: Создайте структуру, где имя каталога соответствует имени пакета. Для этого может понадобится немного "ручной работы" если вы скачивали `tar.gz` файлы. Важно, чтобы внутри каждого каталога с именем пакета находились соответствующие файлы пакета (обычно `.whl` или `.tar.gz`).
  3. Создайте файл `index.html`: В корне вашего локального репозитория создайте файл `index.html`. Этот файл должен содержать ссылки на все пакеты. Вы можете автоматизировать этот процесс с помощью инструмента `devpi` или `pip-simple-server` (описаны далее) или написать небольшой скрипт, который генерирует HTML на основе файлов в директориях. Пример содержимого `index.html`:
    
    <!DOCTYPE html>
    <html>
    <head>
      <title>Local Package Repository</title>
    </head>
    <body>
      <a href="requests/requests-2.28.1-py3-none-any.whl">requests-2.28.1-py3-none-any.whl</a><br>
      <a href="beautifulsoup4/beautifulsoup4-4.12.2-py3-none-any.whl">beautifulsoup4-4.12.2-py3-none-any.whl</a><br>
    </body>
    </html>
            

Использование локального репозитория с `pip`:

Указать `pip` использовать локальный репозиторий можно несколькими способами:

  • Через командную строку: Используйте опцию `--index-url`: pip install --index-url file:///путь/к/вашему/локальному/репозиторию пакет Замените `/путь/к/вашему/локальному/репозиторию` на абсолютный путь к директории, содержащей `index.html`. Обратите внимание на `file:///`. Три слеша обязательны.
  • Через файл конфигурации `pip.conf` (или `pip.ini` в Windows): Создайте или отредактируйте файл конфигурации `pip`:
    
    [global]
    index-url = file:///путь/к/вашему/локальному/репозиторию
          
    Файл `pip.conf` обычно находится в `$HOME/.config/pip/pip.conf` в Linux/macOS и `%APPDATA%\pip\pip.ini` в Windows. После добавления этой конфигурации, `pip` будет всегда использовать указанный локальный репозиторий.
  • Через переменные окружения: Установите переменную окружения `PIP_INDEX_URL`: export PIP_INDEX_URL=file:///путь/к/вашему/локальному/репозиторию (Linux/macOS) set PIP_INDEX_URL=file:///путь/к/вашему/локальному/репозиторию (Windows)

Альтернативные инструменты:

Для более продвинутого управления локальными репозиториями можно использовать следующие инструменты:

  • `devpi`: Мощный и гибкий сервер PyPI, позволяющий создавать частные и публичные индексы, кэшировать пакеты и управлять разрешениями. Требует установки и настройки сервера.
  • `bandersnatch`: Инструмент для зеркалирования всего PyPI или его части. Полезен для создания локальной копии PyPI.
  • `pip-simple-server`: Простой HTTP сервер для обслуживания директории с пакетами как простого индекса `pip`. Легко настраивается и запускается, но предоставляет меньше функциональности, чем `devpi`.

Пример использования `pip-simple-server`:

  1. Установите `pip-simple-server`: pip install pip-simple-server
  2. Запустите сервер в директории с вашими пакетами: python -m pip_simple_server . (точка указывает на текущую директорию)
  3. Укажите `pip` использовать сервер: pip install --index-url http://localhost:8000 пакет (обычно сервер запускается на порту 8000).

Локальные репозитории значительно облегчают управление зависимостями, особенно в средах без постоянного доступа к сети или при необходимости воспроизводимости сборки проектов.

0