How do I list the files inside a python wheel?
You can take the wheel file change the extension to .zip
and then extract the contents like any other zip file.
from PEP 427
A wheel is a ZIP-format archive with a specially formatted file nameand the
.whl
extension.
Example
the Django python package has a wheel file. Try Django-1.8.4-py2.py3-none-any.whl as an example. Their package contains non-python files if you wanted to see where they end up being stored in the archive.
Code
The following code works correctly using python2
and python3
. It will list the files in any wheel package. I use the pep8
wheel package as an example, whose wheel can be downloaded with pip download --no-deps pep8==1.7.0
.
import pprintfrom zipfile import ZipFilepath = 'pep8-1.7.0-py2.py3-none-any.whl'names = ZipFile(path).namelist()pprint.pprint(names)
Output
['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']
unzip -l dist/*.whl
(credit)
Since a wheel is a ZIP file, unzip
works. Tab completion for the file name won't work, unless the extension is renamed to zip
. The from zipfile import ZipFile
approach assumes only the presence of Python in the system, but a one-liner in the shell is more practical.
Another option is to view the contents of the wheel file using vim
. This can be done by first adding to the file ~/.vimrc
the line:
au BufReadCmd *.whl call zip#Browse(expand("<amatch>"))
(vimrc
and BufReadCmd
documentation) and then using:
vim filename.whl
within vim
, files can be entered by pressing the key ENTER
, and exited by typing :q
. vim
can be exited by typing :q
when viewing the directory listing within the wheel file.
One could use Python's own zipfile
module and CLI to list the files in a wheel (or any other zip file):
python -m zipfile --list path/to/my-wheel-file.whl
Or to extract:
python -m zipfile --extract path/to/my-wheel-file.whl path/to/output/directory