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 name and 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 pprint
from zipfile import ZipFile
path = '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.