Як слід обробляти посилання на приватні залежності в 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 Black Stack Overflow або Vault Ansible

Як варіант: Контейнеризація допоможе, оскільки все, що потрібно для запуску програмного забезпечення, вбудовано.


0

Будьте дуже уважні до використання цього розчину. Як зазначено в документації :

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

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

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

Це все ще має сніфу, що ваші облікові дані надрукуються до терміналу під час його встановлення, але принаймні вони не потрапляють у ваш дистрибутив. Зауважте, що це рішення замінює вашу індексну URL-адресу, тому ваше приватне репо також має відображати загальнодоступну. Я не бачив підтримки щодо додавання покажкових URL-адрес жодним очевидним чином.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.