Come devono essere gestiti i collegamenti delle dipendenze private in setup.py


10

Al lavoro utilizziamo un server pypi privato. Questo server pypi è specificato come collegamento 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 nostri casi. Tuttavia, qualche tempo fa abbiamo dovuto installare pacchetti su un server client. Per questo abbiamo dovuto copiare un valido .pypircprima di poter installare qualsiasi pacchetto.

Anche il codice sopra sembra solo un trucco sporco.

Qual è il modo corretto di specificare collegamenti di dipendenza sicuri senza credenziali di hardcoding?


1
Capisco cosa intendi. Non è così sporco di un hack, ma significa che stai accoppiando l'autenticazione con la gestione delle dipendenze in base al pacchetto. Questo approccio non è portatile o scalabile.
Joel Cornett,

Risposte:


1

Questo sembra un trucco ragionevole e non affatto 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 viene svolto e svolto bene, l'unico modo per renderlo migliore è documentarlo e provarlo su più configurazioni diverse o con più server pypi e risolvere i problemi che ne derivano.


0

Una possibilità potrebbe essere l'impostazione delle variabili di ambiente . Questo potrebbe essere fatto con strumenti di distribuzione come Ansible . Memorizza i tuoi segreti con Blackbox di Stack Overflow o Ansible's Vault

In alternativa: la containerizzazione sarebbe di aiuto, poiché tutto ciò che è necessario per eseguire il software è integrato.


0

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

Verranno inoltre scritti nei metadati dell'uovo per essere utilizzati da strumenti come EasyInstall da utilizzare durante l'installazione di un file .egg.

Cioè, le tue credenziali saranno distribuite nel .egg. Effettuando il rooting tramite il setuptoolscodice sorgente, ho scoperto che internamente sembra che stia usando il easy_installcomando per installare le dipendenze. Pertanto, aggiungendo quanto segue ai tuoi setup.cfgfa sì che raccolga un repository privato:

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

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.