2009-04-22 6 views
10

Qual è il comando magico "python setup.py some_incantation_here" per caricare un pacchetto in PyPI, in un modulo che può essere scaricato per ottenere il pacchetto originale nella sua forma originale?Come caricare un pacchetto Python pristine in PyPI?

Ho un pacchetto con qualche fonte e alcuni file di immagine (come package_data). Se faccio "setup.py sdist register upload", il file .tar.gz ha i file immagine esclusi. Se faccio "setup.py bdist_egg register upload", l'uovo contiene le immagini ma esclude il file setup.py. Voglio essere in grado di ottenere un file caricato che è solo l'interezza del mio progetto - alias "setup.py the_whole_freaking_thing register upload".

Forse il modo migliore per farlo è quello di tar.gz manualmente la mia directory del progetto e caricarlo utilizzando l'interfaccia web PyPI?

Attenzione: sto cercando di evitare di archiviare un progetto semplice che ho appena creato nel mio repository SVN e su PyPI - sembra uno spreco di lavoro per tenere traccia della sua cronologia e dei file in due punti .

risposta

16

Quando si esegue un comando "sdist", ciò che controlla l'elenco di file inclusi è il file "MANIFEST.in" posto accanto a "setup.py", non quello che è elencato in "pacchetto_data". Questo ha qualcosa a che fare con la natura schizofrenica delle soluzioni di packaging Python oggi; "sdist" è alimentato dal distutils nella libreria standard, mentre "bdist_egg" è controllato dal modulo setuptools.

Per risolvere il problema, prova a creare un MANIFEST.in vicino al file setup.py, e dare contenuti in questo modo:

include *.jpg 

Naturalmente, sono immagini che i "file immagine" sono immagini reali piuttosto che immagini disco o immagini ISO o qualcosa del genere; potrebbe essere necessario regolare la riga sopra se ho indovinato sbagliato! Ma controlla la sezione Specifying which files to distribute dei documenti di distutils e vedi se non riesci a ottenere quei file che appaiono nella tua distribuzione di sorgenti .tar.gz! In bocca al lupo.

+0

Perfetto! "include nosenotify/*. png" era il formato che mi serviva, poiché i miei file erano in una sottodirectory - questo formato garantiva che la directory nosenotify/.tar.gz contenesse i suoi file .png. –

+2

PS Brandon, ironicamente dopo aver letto la tua risposta, sono andato sul tuo blog e ho visto il post di un giorno prima della mia domanda, dicendo che eri talmente stufo di setup.py che stavi facendo pyron. :) –