2016-02-01 30 views
5

fonti che ho trovato più (https://docs.python.org/3/distutils/sourcedist.html#specifying-the-files-to-distribute, http://blog.ionelmc.ro/2014/05/25/python-packaging/, http://blog.ionelmc.ro/2014/06/25/python-packaging-pitfalls/) che suggeriscono che il modo per distribuire i file di dati in un pacchetto Python è quello di utilizzare l'opzione di include_package_data setuptools e MANIFEST.in. I file nel mio pacchetto così assomigliano,Dove installa setup.py file di dati all'interno di una virtualenv?

setup.py

setup( # ... include_package_data = True, # ... con il resto del file (si spera irrilevante) eliso.

MANIFEST.IN

graft testdata include ChangeLog include README.rst include COPYING include COPYING.LESSER include tox.ini

Quando eseguo setup.py install o utilizzare pip in un virtualenv, io alla fine con la sorgente Python file stessi, ma senza testdata/ ovunque posso trovarlo. Pensavo che si trattasse di un errore nella mia confezione, tranne che quando prendo un altro pacchetto con un layout simile, non riesco nemmeno a trovare i file di dati. Se clonifico il repository per il pacchetto di esempio https://github.com/ionelmc/python-nameless e lo installo utilizzando , il pacchetto viene installato nella directory lib/python3.4/site-packages/nameless-0.1.0-py3.4.egg/nameless/. Tuttavia, non riesco a trovare nessuno dei file di dati o dei test in nessuna parte del virtualenv. Dove dovrebbero finire? Come dovrebbe funzionare?

La mia motivazione per questa domanda è che un altro collaboratore di un progetto desidera che i test, che richiedono i file di dati, vengano eseguiti da un'installazione di pip. È questo l'approccio giusto in primo luogo?

+0

Usa 'pkg_resources' per scoprire i file di dati. Vedere la mia [risposta] (http://stackoverflow.com/a/34788912/3626079) per domande simili. – ziky

risposta

0

mia comprensione è che si dovrebbe solo

include testdata

invece di graft ing esso - ad essere onesti, io non sono sicuro di quello che in realtà graft fa.

Anche io non credo che sia necessario specificare include_package_data = True affatto

+0

'include' include file corrispondenti al modello, non alle directory. Per quanto ne so, questo è spiegato solo nella documentazione precedente: https://docs.python.org/3/distutils/commandref.html. (Se è spiegato nella documentazione non legacy, non ho idea di dove.) 'Graft' include intere directory. Sia nel mio MANIFEST.in sia nel pacchetto di esempio, 'include' è usato per i singoli file, e non riesco a trovarli neanche nel virtualenv. Ho provato anche 'recursive-include' su' testdata/', e anche questo non funziona. – ceridwen

+0

Ho dovuto affrontare un problema simile ieri. Precedentemente stavo memorizzando manualmente COPYING e LICENSE in '/ etc/nepi', ma questo si stava verificando in virtualenv. Ora (vedi [my git repo here] (http://git.onelab.eu/?p=nepi.git;a=tree)) le cose vanno bene. Se non vedi nessuno dei file inclusi, sospetto che qualcos'altro stia andando male. Inoltre ho visto esempi di 'include' che sono stati usati con una directory ma non hanno prove che funzionerebbe. Sono d'accordo che la documentazione su questo non è esattamente chiaro :) – parmentelat