web-dev-qa-db-fra.com

Comment lister les fichiers dans une roue python?

Je fouille les différentes options pour setup.py pour inclure des fichiers non-python, et ils sont un peu moins intuitifs. J'aimerais pouvoir vérifier le package généré par bdist_wheel pour voir ce qu'il contient réellement - pas tant pour s'assurer que cela fonctionnera (c'est à cela que servent les tests) mais pour voir les effets des options que j'ai définies.

Comment répertorier les fichiers contenus dans un .whl?

30
Andrew

Vous pouvez prendre le fichier de roue changer l'extension en .Zip, puis extrayez le contenu comme tout autre fichier Zip.

de PEP 427

Une roue est une archive au format Zip avec un nom de fichier spécialement formaté et le .whl extension.

Exemple

Django python a un fichier de roue. Essayez Django-1.8.4-py2.py3-none-any.whl comme exemple: leur paquet contient des fichiers non-python si vous voulez voir où ils finissent par être stockés dans l'archive.

Code

Le code suivant fonctionne correctement en python2 et python3. Il répertorie les fichiers dans n'importe quel package de roue. J'utilise le paquet de roues pep8 comme exemple.

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

Sortie

['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']
30
Marwan Alsabbagh

unzip -l dist/*.whl ( crédit )

Puisqu'une roue est un fichier Zip, unzip fonctionne. L'achèvement de tabulation pour le nom de fichier ne fonctionnera pas, sauf si l'extension est renommée en Zip. Le from zipfile import ZipFile L'approche suppose seulement la présence de Python dans le système, mais un one-liner dans le Shell est plus pratique.

10
Ioannis Filippidis