如何在python wheel中列出文件?

时间:2015-10-03 14:57:47

标签: python python-wheel

我正在探讨setup.py包含非python文件的各种选项,而且它们不太直观。我希望能够检查bdist_wheel生成的包,看看它实际上是什么 - 而不是确保它能够正常运行(那是什么测试是的,但要看到我设定的选项的影响。

如何列出.whl中包含的文件?

4 个答案:

答案 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/*.whlcredit

由于轮子是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