如何列出 python 轮内的文件?
How do I list the files inside a python wheel?
我正在研究 setup.py
的各种选项以包含非 python 文件,但它们不太直观。我希望能够检查 bdist_wheel
生成的包以查看其中的实际内容——与其说是为了确保它能正常工作(这就是测试的目的),不如说是为了查看我设置的选项。
如何列出 .whl
中包含的文件?
您可以将 wheel 文件的扩展名更改为 .zip
,然后像任何其他 zip 文件一样提取内容。
来自 PEP 427
A wheel is a ZIP-format archive with a specially formatted file name
and the .whl
extension.
例子
以Django python package has a wheel file. Try Django-1.8.4-py2.py3-none-any.whl为例。如果您想查看它们最终存储在存档中的位置,它们的包中包含非 python 文件。
代码
以下代码使用 python2
和 python3
可以正常工作。它将列出任何 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']
unzip -l dist/*.whl
(credit)
因为wheel is a ZIP file, unzip
有效。文件名的制表符补全将不起作用,除非将扩展名重命名为 zip
。 from zipfile import ZipFile
方法假设系统中仅存在 Python,但 shell 中的一行更实用。
另一种选择是使用 vim
查看 wheel 文件的内容。这可以通过首先将行添加到文件 ~/.vimrc
来完成:
au BufReadCmd *.whl call zip#Browse(expand("<amatch>"))
(vimrc
and BufReadCmd
文档)然后使用:
vim filename.whl
在vim
内,可以按ENTER
键输入文件,按:q
键退出。 vim
可以在查看 wheel 文件中的目录列表时键入 :q
退出。
正如其他人在答案中指出的那样,任何 .whl
文件都可以使用解压缩或右键单击文件并使用 Ubuntu/Debian 中的 Extract Here
图形界面进行提取系统。
解压后,可以查看.py
个文件的源代码和位于library-name-with-version.dist-info
目录下的元数据文件的内容。但是,无法检查共享对象 (.so
) 文件的源代码,因为它是二进制文件。
另一个方便的选择是使用专门为此目的构建的 wheel-inspect 包。包裹描述如下:
wheel-inspect
examines Python wheel files & *.dist-info
directories and outputs various information about their contents as JSON-serializable objects.
示例命令是:
$ wheel2json some_lib_wheel_file.whl
那会吐出 json 文件中的内容。如果此 json 文件需要存储在本地,则将输出重定向到 json 文件。
$ wheel2json some_lib_wheel_file.whl > some_lib.json
可以使用 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
我正在研究 setup.py
的各种选项以包含非 python 文件,但它们不太直观。我希望能够检查 bdist_wheel
生成的包以查看其中的实际内容——与其说是为了确保它能正常工作(这就是测试的目的),不如说是为了查看我设置的选项。
如何列出 .whl
中包含的文件?
您可以将 wheel 文件的扩展名更改为 .zip
,然后像任何其他 zip 文件一样提取内容。
来自 PEP 427
A wheel is a ZIP-format archive with a specially formatted file name and the
.whl
extension.
例子
以Django python package has a wheel file. Try Django-1.8.4-py2.py3-none-any.whl为例。如果您想查看它们最终存储在存档中的位置,它们的包中包含非 python 文件。
代码
以下代码使用 python2
和 python3
可以正常工作。它将列出任何 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']
unzip -l dist/*.whl
(credit)
因为wheel is a ZIP file, unzip
有效。文件名的制表符补全将不起作用,除非将扩展名重命名为 zip
。 from zipfile import ZipFile
方法假设系统中仅存在 Python,但 shell 中的一行更实用。
另一种选择是使用 vim
查看 wheel 文件的内容。这可以通过首先将行添加到文件 ~/.vimrc
来完成:
au BufReadCmd *.whl call zip#Browse(expand("<amatch>"))
(vimrc
and BufReadCmd
文档)然后使用:
vim filename.whl
在vim
内,可以按ENTER
键输入文件,按:q
键退出。 vim
可以在查看 wheel 文件中的目录列表时键入 :q
退出。
正如其他人在答案中指出的那样,任何 .whl
文件都可以使用解压缩或右键单击文件并使用 Ubuntu/Debian 中的 Extract Here
图形界面进行提取系统。
解压后,可以查看.py
个文件的源代码和位于library-name-with-version.dist-info
目录下的元数据文件的内容。但是,无法检查共享对象 (.so
) 文件的源代码,因为它是二进制文件。
另一个方便的选择是使用专门为此目的构建的 wheel-inspect 包。包裹描述如下:
wheel-inspect
examines Python wheel files &*.dist-info
directories and outputs various information about their contents as JSON-serializable objects.
示例命令是:
$ wheel2json some_lib_wheel_file.whl
那会吐出 json 文件中的内容。如果此 json 文件需要存储在本地,则将输出重定向到 json 文件。
$ wheel2json some_lib_wheel_file.whl > some_lib.json
可以使用 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