如何列出 python 轮中的文件?

Posted

技术标签:

【中文标题】如何列出 python 轮中的文件?【英文标题】:How do I list the files inside a python wheel? 【发布时间】:2015-12-31 15:42:43 【问题描述】:

我正在探索setup.py 的各种选项以包含非python 文件,但它们不太直观。我希望能够检查bdist_wheel 生成的包以查看其中的实际内容——与其说是为了确保它会起作用(这就是测试的目的),不如说是为了查看选项的效果我已经设置好了。

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

【问题讨论】:

非常肯定it's a zip file. 关于“不太确定它会起作用”:一些清单项目是不寻常的测试主题,例如确保包含在已编译的外部 C 库中的任何附加许可证文件在轮内形成。最好通过列出车轮的内容来检查这些项目。另见:***.com/questions/24347450/… 【参考方案1】:

您可以将 wheel 文件的扩展名更改为 .zip,然后像任何其他 zip 文件一样提取内容。

来自PEP 427

***是一个 ZIP 格式的存档文件,具有特殊格式的文件名 和.whl 扩展。

示例

Django python package 有一个***文件。以Django-1.8.4-py2.py3-none-any.whl 为例。如果您想查看它们最终在存档中的存储位置,它们的包包含非 python 文件。

代码

以下代码使用python2python3 可以正常工作。它将列出任何车轮包中的文件。我以pep8wheel包为例,可以用pip download --no-deps pep8==1.7.0下载它的wheel。

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']

【讨论】:

好吧,现在我觉得自己很笨。效果很好,谢谢。【参考方案2】:
unzip -l dist/*.whl

(credit)

由于wheel is 和ZIP file,unzip 有效。除非将扩展名重命名为 zip,否则文件名的 Tab 补全将不起作用。 from zipfile import ZipFile 方法假设系统中仅存在 Python,但在 shell 中使用单行代码更为实用。


另一个选项是使用vim 查看轮文件的内容。这可以通过首先添加到文件~/.vimrc 来完成:

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

vimrcBufReadCmd 文档)然后使用:

vim filename.whl

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

【讨论】:

【参考方案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

【讨论】:

【参考方案4】:

正如其他人在答案中指出的那样,任何.whl 文件都可以使用解压缩或右键单击文件并使用 Ubuntu/Debian 系统中的Extract Here 图形界面进行解压缩。

解压后可以查看.py文件的源代码和library-name-with-version.dist-info目录下的元数据文件的内容。但是,共享对象 (.so) 文件的源代码无法检查,因为这是一个二进制文件。


另一个方便的选择是使用专门为此目的构建的wheel-inspect 包。包装说明如下:

wheel-inspect 检查 Python ***文件和 *.dist-info 目录并将有关其内容的各种信息输出为 JSON-serializable 对象。

一个示例命令是:

$ wheel2json some_lib_wheel_file.whl

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

$ wheel2json some_lib_wheel_file.whl > some_lib.json

【讨论】:

以上是关于如何列出 python 轮中的文件?的主要内容,如果未能解决你的问题,请参考以下文章

在xctest中,当拾音器轮中的选项动态时,如何处理拾音器车轮

Python3列出特定目录中的文件[重复]

Python列出文件夹中的文件

python 列出文件夹中的文件

python 列出文件夹中的文件

使用 Python 从 FTP 列出所有子目录中的所有文件