2009-10-05 9 views
16

Dite che siete in una squadra che sta mantenendo un sacco di librerie python interne (uova), e per qualsiasi motivo caricarle su pypi non è un'opzione. Come potresti ospitare le librerie (uova) in modo che easy_install possa ancora funzionare per i membri del tuo team?Come si ospita il proprio repository di uova?

sostanza che sarebbe stato bello se questo ha funzionato ....

(someproj)[email protected]:~$ easy_install myproprietary.lib-dev 
user: uberdev 
password:... 
fetching...... 
Searching for myproprietary.lib-dev 
Reading http://dev.mycompany.corp/myproprietary.lib-dev 
Reading http://dev.mycompany.corp 
Reading http://dev.mycompany.corp/dist 
Best match: myproprietary.lib-dev 
Downloading http://dev.mycompany.corp/dist/myproprietary.lib-dev 

suppongo che ci sia una sorta di server là fuori che possono essere installati, ma mi farebbe piacere una guida da parte degli esperti in materia.

Grazie

+3

Prendi un cartone e mettili in frigo! * Rim-shot * –

risposta

8

Deploy tutte le uova in una directory tutti gli sviluppatori. può raggiungere (per esempio su un server web).

Per installare le uova da quella directory, digitare:

$ easy_install -H None -f http://server/vdir TheEggToInstall 

o.

$ easy_install -H None -f /path/to/directory TheEggToInstall 

-H None mezzi non consentono scaricare uovo da qualsiasi host (ad eccezione di quello nominato nel -f).

La directory può essere raggiungibile tramite http oppure può essere una directory montata (NFS, condivisioni di Windows ecc.). Forse funziona anche l'FTP?

Il easy_install documentation dispone di informazioni su questo.

+0

Cool, grazie mille. Vedo dalla pagina che puoi impostare i tuoi URL preferiti in un file di configurazione. E easy_install gestirà l'autenticazione http di base, che praticamente risponde alla domanda completamente. –

+0

@codeape, ho i file egg ospitati nel mio sito web privato es. https://test.xxx.com/versions/ quando faccio easy_install -H None -f https://test.xxx.com/version/ netforce_account-3.1.0-py3.5.egg, ricevo molto risultato indesiderato come byapssing host test.xx e (host non consentito; vedere http://bit.ly/1dg9ijs per i dettagli). , cosa mi manca? –

+0

Potresti pubblicare l'output della console? – codeape

3

Se la tua squadra è distribuita - e in termini di lingua - quindi un semplice repository subversion di fonte è migliore di un altro tipo di server.

È sufficiente creare progetti e fare in modo che tutti eseguano il checkout. Quando le cose cambiano, digli di aggiornarle.

Se la tua squadra è co-localizzata - e in termini di conversazione - allora anche un'unità condivisa con le librerie "ufficiali" funziona bene. Basta montarlo e includerlo sul tuo PYTHONPATH.

Se si desidera ottenere copie localizzate, fornire la fonte ufficiale in sovversione (o un'unità condivisa) con un buon file setup.py. Semplicemente CD nella directory ed eseguire python setup.py install e tutto il resto accade per loro. È una frazione più semplice di easy_install perché lo setup.py è già parte della distribuzione Python.

Le uova sono per le persone che non parlano a parole.

I membri del tuo team di solito parlano in termini linguistici e non hanno bisogno della maggiore complessità delle uova. Il numero setup.py di base dovrebbe essere sufficiente.

+0

Hai sollevato dei buoni punti. Stavo pensando che usare il controllo della versione come meccanismo di condivisione funzionerebbe se ci fosse un repository, ma se ci fossero molti repository, diciamo uno per uovo, allora avere diverse versioni dei tuoi egg disponibili per i membri del team potrebbe avere più senso come il repository delle uova sarebbe diventato il posto centrale. Più in generale, volevo capire la meccanica alla base del modo in cui easy_install trova le uova, che in base alle risposte sembra relativamente semplice. –

1

Prima di tutto: se i pacchetti sono pacchetti generici dovrebbero essere disponibili pubblicamente, non caricare i pacchetti in PyPI è in genere una cattiva idea, poiché l'installazione di un pacchetto che dipende dal pacchetto significa che il server egg deve essere attivo e funzionante , così come PyPI. Per ogni server coinvolto ottieni più single point of failure.

Ma se si tratta di pacchetti privati ​​che non dovrebbero nemmeno essere elencati su PyPI, o pacchetti utili solo come parte di un sistema di grandi dimensioni, come Plone, è un'altra questione. Quindi vuoi easy___install e buildout etc per cercare le uova sul tuo server. Farlo è abbastanza rapido. Basta mettere la directory eggs su un server web e puntare a quella directory con il parametro -f su easy_install.

Ecco un esempio di tale repository: http://dist.plone.org/release/3.3.1/

+1

Sono d'accordo con te in linea di principio. Tuttavia, alcune aziende ottengono tutto il loro rigore sulla loro "proprietà intellettuale". Inoltre, a mio avviso, il caricamento su Pypi sembra implicare che sono disposto a supportarlo e ad accettare richieste di bug/funzionalità. che potrebbe non essere sempre il caso. O almeno, il momento nel tempo che deve essere condiviso con il team, e il tempo che deve essere condiviso con il mondo può essere tempi diversi. –

2

Io uso ClueReleaseManager

ClueReleaseManager è un'implementazione del backend server di Cheese Shop come fornito da http://pypi.python.org. Utilizza SQLAlchemy (in cima allo sqlite per impostazione predefinita) per archiviare tutti i metadati del progetto e il filesystem per l'archiviazione dei file di progetto.

Problemi correlati