我正在探索setup.py
包括非 python 文件的各种选项,它们有点不直观。我希望能够检查生成的包bdist_wheel
以查看其中的实际内容——与其说确保它可以工作(这就是测试的目的),不如说看看我设置的选项的效果.
如何列出 a 中包含的文件.whl
?
我正在探索setup.py
包括非 python 文件的各种选项,它们有点不直观。我希望能够检查生成的包bdist_wheel
以查看其中的实际内容——与其说确保它可以工作(这就是测试的目的),不如说看看我设置的选项的效果.
如何列出 a 中包含的文件.whl
?
您可以将轮文件更改为扩展名.zip
,然后像任何其他 zip 文件一样提取内容。
轮子是具有特殊格式的文件名和
.whl
扩展名的 ZIP 格式存档。
Django python 包有一个wheel 文件。以 Django-1.8.4- py2.py3 -none-any.whl为例。如果您想查看它们最终存储在存档中的什么位置,它们的包包含非 python 文件。
以下代码使用python2
and可以正常工作python3
。它将列出任何车轮包中的文件。我以pep8
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']
unzip -l dist/*.whl
(信用)
由于轮子是ZIP文件,因此unzip
可以工作。文件名的制表符完成将不起作用,除非将扩展名重命名为zip
. 该from zipfile import ZipFile
方法仅假设系统中存在 Python,但 shell 中的单行更实用。
另一种选择是使用 . 查看 wheel 文件的内容vim
。这可以通过首先在文件中添加~/.vimrc
以下行来完成:
au BufReadCmd *.whl call zip#Browse(expand("<amatch>"))
(vimrc
和BufReadCmd
文档),然后使用:
vim filename.whl
其中vim
,文件可以按 键进入,ENTER
键入退出:q
。查看wheel文件中的目录列表时,vim
可以通过键入退出。:q
可以使用 Python 自己的zipfile
模块和 CLI列出轮子中的文件(或任何其他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
正如其他人在答案中指出的那样,.whl
可以使用解压缩或右键单击文件并使用Extract Here
Ubuntu/Debian 系统中的图形界面进行提取来提取任何文件。
解压后,可以查看文件的源代码.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