我正在探讨setup.py
包含非python文件的各种选项,而且它们不太直观。我希望能够检查bdist_wheel
生成的包,看看它实际上是什么 - 而不是确保它能够正常运行(那是什么测试是的,但要看到我设定的选项的影响。
如何列出.whl
中包含的文件?
答案 0 :(得分:29)
您可以使用wheel文件将扩展名更改为.zip
,然后像任何其他zip文件一样提取内容。
来自PEP 427
滚轮是ZIP格式的存档,带有特殊格式的文件名 以及
.whl
扩展名。
示例强>
Django python package有一个轮文件。以Django-1.8.4-py2.py3-none-any.whl为例。他们的软件包包含非python文件,如果你想知道它们最终存储在存档中的哪个位置。
<强>代码强>
以下代码在python2和python3中正常工作。它将列出任何wheel包中的文件。我以pep8轮组为例。
from zipfile import ZipFile
path = '/tmp/pep8-1.7.0-py2.py3-none-any.whl'
print(ZipFile(path).namelist())
<强>输出强>
['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']
答案 1 :(得分:8)
unzip -l dist/*.whl
(credit)
由于轮子是ZIP文件,unzip
可以正常工作。除非将扩展名重命名为zip
,否则文件名的标签完成将不起作用。 from zipfile import ZipFile
方法假定系统中只存在Python,但shell中的单行更实用。
答案 2 :(得分:3)
一个人可以使用Python自己的zipfile
module and CLI在 wheel (或任何其他 zip 文件)中列出文件:
python -m zipfile --list path/to/my-wheel-file.whl
或提取:
python -m zipfile --extract path/to/my-wheel-file.whl path/to/output/directory
答案 3 :(得分:0)
正如其他人在答案中指出的那样,可以使用解压缩或右键单击该文件并在Ubuntu / Debian系统中使用.whl
图形界面来提取任何Extract Here
文件。
提取后,可以检查.py
文件的源代码和将位于library-name-with-version.dist-info
目录中的元数据文件的内容。但是,共享对象(.so
)文件的源代码是二进制文件,因此无法检查。
另一个方便的选择是使用专门为此目的构建的wheel-inspect软件包。软件包的描述为:
wheel-inspect
检查Python轮文件和*.dist-info
目录,并将有关其内容的各种信息输出为 JSON可序列化对象。
一个示例命令是:
$ wheel2json some_lib_wheel_file.whl
那会吐出json文件中的内容。如果此json文件需要存储在本地,则将输出重定向到json文件。
$ wheel2json some_lib_wheel_file.whl > some_lib.json