Как обрабатывать ссылки на частные зависимости в файле setup.py

10

На работе мы используем частный сервер Pypi. Этот pypi-сервер указан в качестве ссылки зависимости:

...
from setuptools import setup

config = ConfigParser.ConfigParser()
rc = os.path.join(os.path.expanduser('~'), '.pypirc')
config.read(rc)
dependency_links = [
    'https://{}:{}@<private_url>'.format(
        config.get('dc', 'username'), config.get('dc', 'password'))]

setup(
    dependency_links=dependency_links,
    ...)

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

Также приведенный выше код выглядит как грязный хак.

Как правильно указать защищенные ссылки зависимостей без жесткого кодирования учетных данных?

Ремко Хасинг
источник
1
Я понимаю что ты имеешь ввиду. Это не что грязное рубить, но это означает , что вы сочетание аутентификации с управлением зависимостями на основе каждого пакета. Этот подход не является переносимым или масштабируемым.
Джоэл Корнетт

Ответы:

1

Это похоже на разумный, а не грязный взлом на всех.

  1. Есть файл конфигурации для учетных данных
  2. Есть способ ввести пользовательские URL + кредиты в зависимости

Работа выполняется и выполняется хорошо. Единственный способ сделать это лучше - документировать ее и опробовать на нескольких различных установках или на нескольких серверах pypi и решать возникающие из этого проблемы.

Рудольф Олах
источник
0

Одной из возможностей будет установка переменных среды . Это можно сделать с помощью таких инструментов развертывания, как Ansible . Храните свои секреты с помощью Blackbox Stack Overflow или хранилища Ansible

В качестве альтернативы: может помочь контейнеризация, поскольку все необходимое для запуска программного обеспечения встроено.

Томас Джанк
источник
0

Будьте очень осторожны при использовании этого решения. Как указано в документации :

Они также будут записаны в метаданные яйца для использования такими инструментами, как EasyInstall, для использования при установке файла .egg.

Т.е. ваши учетные данные будут распространяться в .egg. Просматривая setuptoolsисходный код, я обнаружил, что внутренне он использует easy_installкоманду для установки зависимостей. Поэтому, добавив следующее к вашим setup.cfgпричинам, вы получите частное хранилище:

[easy_install]
index_url=https://username:password@your.repo/simple

Это все еще имеет snafu, что ваши учетные данные печатаются в терминал при его установке, но по крайней мере они не попадают в ваш дистрибутив. Обратите внимание, что это решение заменяет ваш индексный URL, поэтому ваше частное хранилище также должно отражать общедоступный репо. Я не видел поддержки для добавления URL-адресов индекса очевидным образом.

scranen
источник