Come devono essere gestiti i collegamenti di dipendenza privati in setup.py

10

Al lavoro usiamo un server Pypi privato. Questo server Pypi è specificato come link di dipendenza:

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

Questo funziona bene nella maggior parte dei casi. Tuttavia, qualche tempo fa abbiamo dovuto installare pacchetti su un server client. Per questo abbiamo dovuto copiare un .pypirc valido prima di poter installare qualsiasi pacchetto.

Anche il codice sopra sembra solo un trucco sporco.

Qual è il modo corretto per specificare i collegamenti di dipendenza protetti senza le credenziali di hardcoding?

    
posta Remco Haszing 06.11.2014 - 19:12
fonte

3 risposte

1

Questo sembra un trucco ragionevole e non del tutto sporco.

  1. Esiste un file di configurazione per le credenziali
  2. C'è un modo per iniettare l'URL personalizzato + i crediti nelle dipendenze

Il lavoro è stato fatto e fatto bene, l'unico modo per migliorarlo è documentarlo e provarlo su più configurazioni diverse o con più server Pypi e problemi di indirizzo che ne derivano.

    
risposta data 05.12.2016 - 19:41
fonte
0

Una possibilità sarebbe impostare Variabili d'ambiente . Questo potrebbe essere fatto con strumenti di implementazione come Ansible . Memorizza i tuoi segreti con Blackbox di Overflow dello stack o Ansible's Vault

In alternativa: la containerizzazione sarebbe utile, dato che tutto il necessario per eseguire il software è integrato.

    
risposta data 02.10.2017 - 14:08
fonte
0

Fai molta attenzione quando usi questa soluzione. Come indicato in documentazione :

They will also be written into the egg’s metadata for use by tools like EasyInstall to use when installing an .egg file.

I., le tue credenziali saranno distribuite in .egg . Facendo il rooting attraverso il codice sorgente setuptools , ho scoperto che internamente sembra che stia usando il comando easy_install per installare le dipendenze. Pertanto, aggiungendo quanto segue al tuo setup.cfg , si ottiene un repository privato:

[easy_install]
index_url=https://username:[email protected]/simple

Questo ha ancora il problema che le tue credenziali vengono stampate sul terminale durante l'installazione, ma almeno non finiscono nella tua distribuzione. Nota che questa soluzione sostituisce l'URL dell'indice, quindi anche il repository privato deve rispecchiare quello pubblico. Non ho visto il supporto per aggiungere URL dell'indice in modo ovvio.

    
risposta data 03.01.2019 - 18:29
fonte

Leggi altre domande sui tag