Укажите зависимости частного репозитория в файле требований в 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