我正在浏览setup.py包含非python文件的各种选项,它们有点不那么直观。我希望能够检查bdist_wheel生成的包,看看里面到底有什么--不是为了确保它能工作(这就是测试的目的),而是为了看看我设置的选项的效果。如何列出.whl中包含的文件?
setup.py
bdist_wheel
.whl
wz1wpwve1#
您可以将wheel文件的扩展名更改为.zip,然后像任何其他zip文件一样提取内容。从PEP 427wheel是一个ZIP格式的归档文件,具有特殊格式的文件名和.whl扩展名。
.zip
Django python package有一个wheel文件。尝试Django-1.8.4-py2.py3-none-any.whl作为示例。他们的包包含非python文件,如果你想看看它们最终存储在归档文件中的位置。
下面的代码使用python2和python3正确工作。它将列出任何wheel包中的文件。我以pep8 wheel包为例,它的wheel可以通过pip download --no-deps pep8==1.7.0下载。
python2
python3
pep8
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']
4sup72z82#
unzip -l dist/*.whl
(credit)因为轮子是ZIP file,所以unzip可以工作。除非将扩展名重命名为zip,否则文件名的制表符补全将不起作用。from zipfile import ZipFile方法假设系统中只存在Python,但shell中的一行程序更实用。另一个选项是使用vim查看wheel文件的内容。这可以通过首先向文件~/.vimrc添加以下行来完成:
unzip
zip
from zipfile import ZipFile
vim
~/.vimrc
au BufReadCmd *.whl call zip#Browse(expand("<amatch>"))
(vimrc和BufReadCmd文档),然后使用:
vimrc
BufReadCmd
vim filename.whl
在vim中,按ENTER键可以进入文件,键入:q可以退出文件。查看wheel文件中的目录列表时,可以通过键入:q退出vim。
ENTER
:q
xwbd5t1u3#
可以使用Python自己的 zipfile 模块和CLI来列出 wheel(或任何其他 zip 文件)中的文件:
zipfile
python -m zipfile --list path/to/my-wheel-file.whl
或提取:
python -m zipfile --extract path/to/my-wheel-file.whl path/to/output/directory
j1dl9f464#
正如其他人在回答中指出的那样,任何.whl文件都可以使用解压缩或右键单击文件并使用Ubuntu/Debian系统中的Extract Here图形界面进行提取。解压缩后,可以检查.py文件的源代码和library-name-with-version.dist-info目录中的元数据文件的内容。但是,共享对象(.so)文件的源代码无法检查,因为它是一个二进制文件。另一个方便的选择是使用专门为此目的构建的wheel-inspect包。 Package 说明如下:wheel-inspect检查Python wheel文件和*.dist-info目录,并将有关其内容的各种信息输出为JSON可序列化对象。示例命令为:
Extract Here
.py
library-name-with-version.dist-info
.so
wheel-inspect
*.dist-info
$ wheel2json some_lib_wheel_file.whl
这将在json文件中输出内容。如果这个json文件需要本地存储,那么将输出重定向到一个json文件。
$ wheel2json some_lib_wheel_file.whl > some_lib.json
hlswsv355#
一个简单的方法(在Windows中)是在文件名的末尾附加一个.zip扩展名。例如:
somepackage-1.0.0-py3-none-any.whl --> somepackage-1.0.0-py3-none-any.whl.zip
然后只需打开文件与Windows文件资源管理器,看看有什么文件。如果仍需要使用原始文件,则应将名称改回来。
dohp0rv56#
whl文件只是一个zip压缩包,因此您可以使用tar与它进行交互:列表内容:
whl
tar
tar -tf dist/somepackage-1.0.0-py3-none-any.whl
打印一个特定文件的内容到标准输出(例如. somepackage-1.0.0.dist_info/METADATA)
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
6条答案
按热度按时间wz1wpwve1#
您可以将wheel文件的扩展名更改为
.zip
,然后像任何其他zip文件一样提取内容。从PEP 427
wheel是一个ZIP格式的归档文件,具有特殊格式的文件名和
.whl
扩展名。示例
Django python package有一个wheel文件。尝试Django-1.8.4-py2.py3-none-any.whl作为示例。他们的包包含非python文件,如果你想看看它们最终存储在归档文件中的位置。
代码
下面的代码使用
python2
和python3
正确工作。它将列出任何wheel包中的文件。我以pep8
wheel包为例,它的wheel可以通过pip download --no-deps pep8==1.7.0
下载。输出
4sup72z82#
(credit)
因为轮子是ZIP file,所以
unzip
可以工作。除非将扩展名重命名为zip
,否则文件名的制表符补全将不起作用。from zipfile import ZipFile
方法假设系统中只存在Python,但shell中的一行程序更实用。另一个选项是使用
vim
查看wheel文件的内容。这可以通过首先向文件~/.vimrc
添加以下行来完成:(
vimrc
和BufReadCmd
文档),然后使用:在
vim
中,按ENTER
键可以进入文件,键入:q
可以退出文件。查看wheel文件中的目录列表时,可以通过键入:q
退出vim
。xwbd5t1u3#
可以使用Python自己的
zipfile
模块和CLI来列出 wheel(或任何其他 zip 文件)中的文件:或提取:
j1dl9f464#
正如其他人在回答中指出的那样,任何
.whl
文件都可以使用解压缩或右键单击文件并使用Ubuntu/Debian系统中的Extract Here
图形界面进行提取。解压缩后,可以检查
.py
文件的源代码和library-name-with-version.dist-info
目录中的元数据文件的内容。但是,共享对象(.so
)文件的源代码无法检查,因为它是一个二进制文件。另一个方便的选择是使用专门为此目的构建的wheel-inspect包。 Package 说明如下:
wheel-inspect
检查Python wheel文件和*.dist-info
目录,并将有关其内容的各种信息输出为JSON可序列化对象。示例命令为:
这将在json文件中输出内容。如果这个json文件需要本地存储,那么将输出重定向到一个json文件。
hlswsv355#
一个简单的方法(在Windows中)是在文件名的末尾附加一个
.zip
扩展名。例如:然后只需打开文件与Windows文件资源管理器,看看有什么文件。如果仍需要使用原始文件,则应将名称改回来。
dohp0rv56#
whl
文件只是一个zip压缩包,因此您可以使用tar
与它进行交互:列表内容:
打印一个特定文件的内容到标准输出(例如.
somepackage-1.0.0.dist_info/METADATA
)