列出 Python wheel 文件的依赖项
List dependencies of Python wheel file
我有 Python 车轮文件:psutil-5.4.5-cp26-none-linux_x86_64.whl
如何列出此轮子的依赖项?
您可以在单独的虚拟环境中安装 wheel 文件,然后查看安装了哪些所有其他包。
使用pip freeze
命令查看所有已安装的包。
我只是试图解压(不是 gunzip)我身边的一个 wheel 包。 packagename-version.dist-info/METADATA
文件包含 Requires-Dist:
条目的列表,其中包含来自 setup.py
.
的已编译要求
如前所述,.whl
文件只是 ZIP 存档。您可以打开它们并在 METADATA
文件中四处查看。
但是,有一个工具可以使这个手动过程更容易一些。可以使用pkginfo,可以用pip安装
CLI 用法:
$ pip install pkginfo
$ pkginfo -f requires_dist psutil-5.4.5-cp27-none-win32.whl
requires_dist: ["enum34; extra == 'enum'"]
API 用法:
>>> import pkginfo
>>> wheel_fname = "psutil-5.4.5-cp27-none-win32.whl"
>>> metadata = pkginfo.get_metadata(wheel_fname)
>>> metadata.requires_dist
[u"enum34 ; extra == 'enum'"]
这是一个不需要任何外部工具(unzip、gzip 或类似工具)的最小片段,因此它应该适用于 *nix/windows:
wheeldeps.py:
import argparse
from zipfile import ZipFile
parser = argparse.ArgumentParser()
parser.add_argument('filename')
args = parser.parse_args()
archive = ZipFile(args.filename)
for f in archive.namelist():
if f.endswith("METADATA"):
for l in archive.open(f).read().decode("utf-8").split("\n"):
if 'requires-dist' in l.lower():
print(l)
示例:
> python wheeldeps.py psutil-5.4.5-cp27-cp27m-win_amd64.whl
Requires-Dist: enum34; extra == 'enum'
这是我在某处找到的 post。我复制了所有内容并通过电子邮件发送给自己,所以我没有这个答案的来源,但我认为这可能会有所帮助。如果有人知道来源,我会删除这个 post 和 link 到那个 post.
Installation
$ pip install --upgrade pip # pip-tools needs pip==6.1 or higher (!)
$ pip install pip-tools
Example usage for pip-compile
Suppose you have a Flask project, and want to pin it for production. Write the following line to a file:
# requirements.in
Flask
Now, run pip-compile requirements.in:
$ pip-compile requirements.in
#
# This file is autogenerated by pip-compile
# Make changes in requirements.in, then run this to update:
#
# pip-compile requirements.in
#
flask==0.10.1
itsdangerous==0.24 # via flask
jinja2==2.7.3 # via flask
markupsafe==0.23 # via jinja2
werkzeug==0.10.4 # via flask
And it will produce your requirements.txt, with all the Flask dependencies (and all underlying dependencies) pinned. Put this file under version control as well and periodically re-run pip-compile to update the packages.
Example usage for pip-sync
Now that you have a requirements.txt, you can use pip-sync to update your virtual env to reflect exactly what's in there. Note: this will install/upgrade/uninstall everything necessary to match the requirements.txt contents.
$ pip-sync
Uninstalling flake8-2.4.1:
Successfully uninstalled flake8-2.4.1
Collecting click==4.1
Downloading click-4.1-py2.py3-none-any.whl (62kB)
100% |████████████████████████████████| 65kB 1.8MB/s
Found existing installation: click 4.0
Uninstalling click-4.0:
Successfully uninstalled click-4.0
Successfully installed click-4.1
requirement.txt 将具有软件包所需的所有要求。
我使用 pipenv
安装我的虚拟环境,根据要求安装 pew
。 pew
允许您安装临时虚拟环境,这些临时虚拟环境在您 exit
那些特殊虚拟环境时被删除。所以...
创建一个新的空虚拟环境并即时激活它:
pew mktmpenv -p /usr/bin/python3.6
安装你的包:
pip install somedistro
查看您的发行版的要求是什么(以及要求的要求...):
pip list
停用并删除临时环境。
exit
此外,临时虚拟环境在打包测试时非常有用。
从解压 wheel 文件的目录(将 .whl 更改为 .zip 并解压)运行 shell 命令行中的以下内容:
grep --include=METADATA -rnw '.' -e "Requires-Dist"
我有 Python 车轮文件:psutil-5.4.5-cp26-none-linux_x86_64.whl
如何列出此轮子的依赖项?
您可以在单独的虚拟环境中安装 wheel 文件,然后查看安装了哪些所有其他包。
使用pip freeze
命令查看所有已安装的包。
我只是试图解压(不是 gunzip)我身边的一个 wheel 包。 packagename-version.dist-info/METADATA
文件包含 Requires-Dist:
条目的列表,其中包含来自 setup.py
.
如前所述,.whl
文件只是 ZIP 存档。您可以打开它们并在 METADATA
文件中四处查看。
但是,有一个工具可以使这个手动过程更容易一些。可以使用pkginfo,可以用pip安装
CLI 用法:
$ pip install pkginfo
$ pkginfo -f requires_dist psutil-5.4.5-cp27-none-win32.whl
requires_dist: ["enum34; extra == 'enum'"]
API 用法:
>>> import pkginfo
>>> wheel_fname = "psutil-5.4.5-cp27-none-win32.whl"
>>> metadata = pkginfo.get_metadata(wheel_fname)
>>> metadata.requires_dist
[u"enum34 ; extra == 'enum'"]
这是一个不需要任何外部工具(unzip、gzip 或类似工具)的最小片段,因此它应该适用于 *nix/windows:
wheeldeps.py:
import argparse
from zipfile import ZipFile
parser = argparse.ArgumentParser()
parser.add_argument('filename')
args = parser.parse_args()
archive = ZipFile(args.filename)
for f in archive.namelist():
if f.endswith("METADATA"):
for l in archive.open(f).read().decode("utf-8").split("\n"):
if 'requires-dist' in l.lower():
print(l)
示例:
> python wheeldeps.py psutil-5.4.5-cp27-cp27m-win_amd64.whl
Requires-Dist: enum34; extra == 'enum'
这是我在某处找到的 post。我复制了所有内容并通过电子邮件发送给自己,所以我没有这个答案的来源,但我认为这可能会有所帮助。如果有人知道来源,我会删除这个 post 和 link 到那个 post.
Installation
$ pip install --upgrade pip # pip-tools needs pip==6.1 or higher (!)
$ pip install pip-tools
Example usage for pip-compile
Suppose you have a Flask project, and want to pin it for production. Write the following line to a file:
# requirements.in
Flask
Now, run pip-compile requirements.in:
$ pip-compile requirements.in
#
# This file is autogenerated by pip-compile
# Make changes in requirements.in, then run this to update:
#
# pip-compile requirements.in
#
flask==0.10.1
itsdangerous==0.24 # via flask
jinja2==2.7.3 # via flask
markupsafe==0.23 # via jinja2
werkzeug==0.10.4 # via flask
And it will produce your requirements.txt, with all the Flask dependencies (and all underlying dependencies) pinned. Put this file under version control as well and periodically re-run pip-compile to update the packages.
Example usage for pip-sync
Now that you have a requirements.txt, you can use pip-sync to update your virtual env to reflect exactly what's in there. Note: this will install/upgrade/uninstall everything necessary to match the requirements.txt contents.
$ pip-sync
Uninstalling flake8-2.4.1:
Successfully uninstalled flake8-2.4.1
Collecting click==4.1
Downloading click-4.1-py2.py3-none-any.whl (62kB)
100% |████████████████████████████████| 65kB 1.8MB/s
Found existing installation: click 4.0
Uninstalling click-4.0:
Successfully uninstalled click-4.0
Successfully installed click-4.1
requirement.txt 将具有软件包所需的所有要求。
我使用 pipenv
安装我的虚拟环境,根据要求安装 pew
。 pew
允许您安装临时虚拟环境,这些临时虚拟环境在您 exit
那些特殊虚拟环境时被删除。所以...
创建一个新的空虚拟环境并即时激活它:
pew mktmpenv -p /usr/bin/python3.6
安装你的包:
pip install somedistro
查看您的发行版的要求是什么(以及要求的要求...):
pip list
停用并删除临时环境。
exit
此外,临时虚拟环境在打包测试时非常有用。
从解压 wheel 文件的目录(将 .whl 更改为 .zip 并解压)运行 shell 命令行中的以下内容:
grep --include=METADATA -rnw '.' -e "Requires-Dist"