Укажите зависимости частного репозитория в файле требований в Python.

Примечание. Эта статья изначально была опубликована в моем личном блоге



Вступление:

Как Pythonista, все мы знаем, где указать зависимости нашего проекта. Файл requirements.txt традиционно содержит все зависимости проекта. Указанные библиотеки из этого файла будут установлены из репозитория PyPI.

Типичный requirements.txt выглядит так.

boto3
warrant-lite 
requests 
PyInquirer

Когда вы говорите pip install -r requirements.txt, pip по умолчанию просматривает репозиторий PyPI для библиотек, упомянутых в requirements.txt.

Итак, теперь возникает вопрос.

Что делать, если вы хотите установить библиотеку, размещенную в репозитории, отличном от PyPI. Это может быть ваш собственный репозиторий или внутренний репозиторий вашей организации. Чтобы узнать больше, читайте дальше.

Установка библиотек из внутренних репозиториев

Чтобы установить одну библиотеку из внутреннего репозитория, вы всегда можете указать --index-url и установить ее, как показано ниже.

$pip install --index-url https://your/internal/repository/python/ mylibrary==1.0.0

Это даст следующую трассировку. Это показывает, что он ищет указанную библиотеку в репозитории, отличном от PyPI.

Looking in indexes: https://your/internal/repository/python/ Collecting mylibrary Downloading https://your/internal/repository/python/ 
... 
...

Это просто отлично работает в среде разработки для одноразовой установки. Однако для развертываний нам может потребоваться указать URL-адрес индекса как часть requirements.txt.

Указание зависимостей, отличных от PyPI, в файле requirements.txt

Метод 1: Использование URL-адреса индекса:

Давайте попробуем указать URL индекса в файле requirements.txt.

boto3 warrant-lite requests PyInquirer --index-url https://your/internal/repository/python mylibrary

Похоже, это могло сработать. Однако проблема в том, что он будет искать все библиотеки во внутреннем репозитории. Если у вас есть все другие библиотеки как часть ваших транзитивных зависимостей, установка может быть успешной, а может и нет. Это зависит от библиотеки, которую вы используете.

Что, если у нас есть сочетание PyPI и не-PyPI библиотек? Что, если мы хотим, чтобы наш requirements.txt работал на обоих. Подойдет небольшое изменение в файле требований.

boto3 
warrant-lite 
requests 
PyInquirer 
--extra-index-url https://your/internal/repository/python mylibrary

Теперь мы рассмотрим как PyPI, так и ваши внутренние репозитории.

Looking in indexes: https://pypi.org/simple, https://your/internal/repository/python Collecting boto3 (from -r requirements.txt (line 1)) Downloading https://files.pythonhosted.org/packages 
...
... 
....

Это еще один способ указать ваши репозитории, отличные от PyPI, в вашем requirements.txt, используя --extra-index url.

Метод 2: Использование дополнительного URL-адреса индекса:

Вы также можете указать свои внутренние и PyPI зависимости в отдельных requirements.txt файлах и установить их отдельными командами. Убедитесь, что библиотеки из обоих файлов установлены как часть конвейера сборки.

requirements.txt 
requirements-internal.txt
$pip install -r requirements.txt 
$pip install -r requirements-internal.txt

Это также должно работать и убедитесь, что вы указали URL-адрес индекса в файле requirements-internal.txt, как мы это сделали в первом примере метода 1.

Метод 3: Использование репозитория GitHub:

Мы обсудили, как указать требования с помощью --index-url и --extra-index-url. Мы также можем указать требования, используя ссылки GitHub для частных / общедоступных репозиториев. Это не требует от вас указывать --index-url.

boto3 
warrant-lite 
requests 
PyInquirer 
git+https://<your personal token>@github.com/mylibrary.git#egg=mylibrary

Если вашей организации требуется аутентификация, убедитесь, что вы указали свой личный токен доступа. Это установит все требования, включая внутренние.

Вы также можете указать ссылку GitHub в редактируемом режиме, как показано ниже.

-e git+https://<your personal token>@github.com/mylibrary.git#egg=mylibrary

Примечание: обратите внимание, что при установке в режиме -e файлы не копируются в каталог site-packages.

Установить из определенной ветки

git+https://<your personal token>@github.com/mylibrary.git@master#egg=mylibrary

Установить с определенного тега

git+https://<your personal token>@github.com/[email protected]#egg=mylibrary

Резюме

Частные библиотеки могут быть указаны в requirements.txt следующими способами

  • Использование index-url
  • Использование -extra-index url
  • Использование репозитория git

Я всегда предпочитаю использовать URL-адрес с дополнительным индексом или репозиторий GitHub в одном requirements.txt, что упрощает жизнь, а не в распределенном файле requirements.txt.

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

Https://stackoverflow.com/questions/16584552/how-to-state-in-requirements-txt-a-direct-github-source

Первоначально опубликовано на https://dineshkumarkb.com.

Больше контента на plainenglish.io