如何列出python wheel中的文件?

2w3rbyxf  于 2023-06-04  发布在  Python
关注(0)|答案(6)|浏览(186)

我正在浏览setup.py包含非python文件的各种选项,它们有点不那么直观。我希望能够检查bdist_wheel生成的包,看看里面到底有什么--不是为了确保它能工作(这就是测试的目的),而是为了看看我设置的选项的效果。
如何列出.whl中包含的文件?

wz1wpwve

wz1wpwve1#

您可以将wheel文件的扩展名更改为.zip,然后像任何其他zip文件一样提取内容。
PEP 427
wheel是一个ZIP格式的归档文件,具有特殊格式的文件名和.whl扩展名。

示例

Django python package有一个wheel文件。尝试Django-1.8.4-py2.py3-none-any.whl作为示例。他们的包包含非python文件,如果你想看看它们最终存储在归档文件中的位置。

代码

下面的代码使用python2python3正确工作。它将列出任何wheel包中的文件。我以pep8 wheel包为例,它的wheel可以通过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)
输出
['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']
4sup72z8

4sup72z82#

unzip -l dist/*.whl

credit
因为轮子是ZIP file,所以unzip可以工作。除非将扩展名重命名为zip,否则文件名的制表符补全将不起作用。from zipfile import ZipFile方法假设系统中只存在Python,但shell中的一行程序更实用。
另一个选项是使用vim查看wheel文件的内容。这可以通过首先向文件~/.vimrc添加以下行来完成:

au BufReadCmd *.whl call zip#Browse(expand("<amatch>"))

vimrcBufReadCmd文档),然后使用:

vim filename.whl

vim中,按ENTER键可以进入文件,键入:q可以退出文件。查看wheel文件中的目录列表时,可以通过键入:q退出vim

xwbd5t1u

xwbd5t1u3#

可以使用Python自己的 zipfile 模块和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
j1dl9f46

j1dl9f464#

正如其他人在回答中指出的那样,任何.whl文件都可以使用解压缩或右键单击文件并使用Ubuntu/Debian系统中的Extract Here图形界面进行提取。
解压缩后,可以检查.py文件的源代码和library-name-with-version.dist-info目录中的元数据文件的内容。但是,共享对象(.so)文件的源代码无法检查,因为它是一个二进制文件。
另一个方便的选择是使用专门为此目的构建的wheel-inspect包。 Package 说明如下:
wheel-inspect检查Python wheel文件和*.dist-info目录,并将有关其内容的各种信息输出为JSON可序列化对象。
示例命令为:

$ wheel2json some_lib_wheel_file.whl

这将在json文件中输出内容。如果这个json文件需要本地存储,那么将输出重定向到一个json文件。

$ wheel2json some_lib_wheel_file.whl > some_lib.json
hlswsv35

hlswsv355#

一个简单的方法(在Windows中)是在文件名的末尾附加一个.zip扩展名。例如:

somepackage-1.0.0-py3-none-any.whl --> somepackage-1.0.0-py3-none-any.whl.zip

然后只需打开文件与Windows文件资源管理器,看看有什么文件。如果仍需要使用原始文件,则应将名称改回来。

dohp0rv5

dohp0rv56#

whl文件只是一个zip压缩包,因此您可以使用tar与它进行交互:
列表内容:

tar -tf dist/somepackage-1.0.0-py3-none-any.whl

打印一个特定文件的内容到标准输出(例如. somepackage-1.0.0.dist_info/METADATA

tar -Oxf dist/somepackage-1.0.0-py3-none-any.whl somepackage-1.0.0.dist_info/METADATA

相关问题