Comment les liens de dépendance privés doivent-ils être traités dans setup.py

10

Au travail, nous utilisons un serveur pypi privé. Ce serveur pypi est spécifié en tant que lien de dépendance:

...
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,
    ...)

Cela fonctionne très bien dans la plupart de nos cas. Cependant, il y a quelque temps, nous avons dû installer des packages sur un serveur client. Pour cela, nous avons dû copier sur un valide .pypircavant de pouvoir installer des packages.

De plus, le code ci-dessus ressemble à un hack sale.

Quelle est la bonne façon de spécifier des liens de dépendance sécurisés sans informations d'identification en dur?

Remco Haszing
la source
1
Je vois ce que tu veux dire. Ce n'est pas que sale d'un hack, mais cela signifie que vous êtes couplage authentification avec la gestion de la dépendance sur une base par paquet. Cette approche n'est ni portable ni évolutive.
Joel Cornett

Réponses:

1

Cela semble être un hack raisonnable et pas du tout sale.

  1. Il existe un fichier de configuration pour les informations d'identification
  2. Il existe un moyen d'injecter l'URL personnalisée + les crédits dans les dépendances

Le travail est fait et bien fait, la seule façon d'améliorer cela est de le documenter et de l'essayer sur plusieurs configurations différentes ou avec plusieurs serveurs pypi et de résoudre les problèmes qui en découlent.

Rudolf Olah
la source
0

Une possibilité serait de définir des variables d'environnement . Cela pourrait être fait avec des outils de déploiement comme Ansible . Stocker vos secrets avec la Blackbox de Stack Overflow ou le coffre-fort d'Ansible

Alternativement: la conteneurisation serait utile, car tout le nécessaire pour exécuter le logiciel est intégré.

Thomas Junk
la source
0

Soyez très prudent lorsque vous utilisez cette solution. Comme indiqué dans la documentation :

Ils seront également écrits dans les métadonnées de l'oeuf pour être utilisés par des outils comme EasyInstall à utiliser lors de l'installation d'un fichier .egg.

C'est à dire, vos informations d'identification seront distribuées dans le .egg. En fouillant dans le setuptoolscode source, j'ai découvert qu'en interne, il semble utiliser la easy_installcommande pour installer les dépendances. Par conséquent, l'ajout de ce qui suit à vos setup.cfgcauses permet de récupérer un dépôt privé:

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

Cela a toujours le snafu que vos informations d'identification sont imprimées sur le terminal lors de son installation, mais au moins elles ne se retrouvent pas dans votre distribution. Notez que cette solution remplace votre URL d'index, donc votre dépôt privé doit également refléter celui public. Je n'ai vu aucune prise en charge pour l' ajout d' URL d'index d'une manière évidente.

scranen
la source