2015-10-03 14 views
14

Węzłem różne opcje, aby setup.py za dołączanie plików innych niż Pythona, i są one nieco mniej niż intuicyjne. Chciałbym móc sprawdzić pakiet wygenerowany przez bdist_wheel, aby zobaczyć, co faktycznie w nim jest - nie tak bardzo, aby upewnić się, że zadziała (po to są testy), ale żeby zobaczyć efekty opcji, które mam zestaw.Jak wyświetlić listę plików wewnątrz koła python?

Jak wyświetlić listę plików zawartych w .whl?

+2

Całkiem pewien [jest to plik zip] (https://pypi.python.org/pypi/wheel). –

+0

Jeśli chodzi o "nie tyle, aby upewnić się, że zadziała": niektóre pozycje listy kontrolnej są nietypowymi przedmiotami do testowania, na przykład upewniając się, że wszelkie dodatkowe pliki licencji towarzyszą zewnętrznym bibliotekom C, które są zawarte w postaci skompilowanej wewnątrz koła. Pozycje te najlepiej sprawdzać, wyszczególniając zawartość koła. Zobacz także: https://stackoverflow.com/questions/24347450/how-do-you-add-additional-files-to-a-wheel –

Odpowiedz

16

Możesz pobrać plik kół zmienić rozszerzenie na .zip, a następnie wyodrębnić zawartość jak każdy inny plik zip.

z PEP 427

koło jest archiwum ZIP Format ze specjalnie sformatowane nazwy pliku oraz rozszerzenie .whl.

Przykład

Django python package dysponuje plikiem koła. Na przykład wypróbuj Django-1.8.4-py2.py3-none-any.whl. Ich pakiet zawiera pliki spoza Pythona, jeśli chcesz zobaczyć, gdzie są przechowywane w archiwum.

Kod

Następujący kod działa poprawnie w python2 i python3. Wyświetli listę plików w dowolnym pakiecie kół. Na przykład korzystam z pakietu kółka pep8.

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

Wyjście

['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

Cóż, teraz jestem głupi. To działa idealnie, dzięki. – Andrew

+3

@Andrew nigdy nie poczujesz się głupio, jeśli uczysz się czegoś nowego! –

1

unzip -l dist/*.whl (credit)

Ponieważ koło jest plik ZIP, unzip prace. Wypełnianie kart dla nazwy pliku nie będzie działać, chyba że nazwa rozszerzenia zostanie zmieniona na zip. Podejście from zipfile import ZipFile zakłada tylko obecność Pythona w systemie, ale jednolinijkowy w powłoce jest bardziej praktyczny.

Powiązane problemy