如何列出 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 文件。
代码
以下代码使用python2
和python3
可以正常工作。它将列出任何车轮包中的文件。我以pep8
wheel包为例,可以用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>"))
(vimrc
和 BufReadCmd
文档)然后使用:
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 轮中的文件?的主要内容,如果未能解决你的问题,请参考以下文章