2015-10-03 11 views
14

Sto spulciando tra le varie opzioni a setup.py per includere file non python, e sono un po 'meno intuitive. Mi piacerebbe essere in grado di controllare il pacchetto generato da bdist_wheel per vedere cosa ci sia effettivamente in esso - non tanto per assicurarsi che funzioni (questo è ciò che i test servono) ma per vedere gli effetti delle opzioni che ho impostato.Come elenco i file all'interno di una ruota python?

Come elenco i file contenuti in un .whl?

+2

Abbastanza sicuro [è un file zip] (https://pypi.python.org/pypi/wheel). –

+0

Per quanto riguarda "non tanto per assicurarsi che funzioni": alcuni elementi della checklist sono argomenti insoliti per il test, per esempio assicurandosi che eventuali file di licenza aggiuntivi che accompagnano librerie C esterne che sono incluse nella scheda compilata all'interno della ruota. Questi articoli sono controllati meglio elencando i contenuti della ruota. Vedi anche: https://stackoverflow.com/questions/24347450/how-do-you-add-additional-files-to-a-wheel –

risposta

16

È possibile prendere il file della ruota modificare l'estensione in .zip e quindi estrarre il contenuto come qualsiasi altro file zip.

da PEP 427

Una ruota è un archivio formato ZIP con un nome di file appositamente formattato e l'estensione .whl.

Esempio

il Django python package ha un file di ruota. Prova ad esempio Django-1.8.4-py2.py3-none-any.whl. Il loro pacchetto contiene file non Python se si desidera vedere dove finiscono per essere memorizzati nell'archivio.

Codice

Il seguente codice funziona correttamente in python2 e python3. Elencherà i file in qualsiasi pacchetto di ruote. Io uso il pacchetto ruota pep8 come esempio.

from zipfile import ZipFile 
path = '/tmp/pep8-1.7.0-py2.py3-none-any.whl' 
print(ZipFile(path).namelist()) 

uscita

['pep8.py', 'pep8-1.7.0.dist-info/DESCRIPTION.rst', 'pep8-1.7.0.dist-info/entry_points.txt', 'pep8-1.7.0.dist-info/metadata.json', 'pep8-1.7.0.dist-info/namespace_packages.txt', 'pep8-1.7.0.dist-info/top_level.txt', 'pep8-1.7.0.dist-info/WHEEL', 'pep8-1.7.0.dist-info/METADATA', 'pep8-1.7.0.dist-info/RECORD'] 
+0

Bene, ora mi sento stupido. Funziona perfettamente, grazie. – Andrew

+3

@Andrew non ti senti mai stupido se stai imparando qualcosa di nuovo! –

1

unzip -l dist/*.whl (credit)

Dal momento che una ruota è un file ZIP, unzip opere. Il completamento della scheda per il nome del file non funzionerà, a meno che l'estensione non venga rinominata in zip. L'approccio from zipfile import ZipFile presuppone solo la presenza di Python nel sistema, ma un one-liner nella shell è più pratico.

Problemi correlati