列出Python wheel文件的依赖关系

时间:2018-05-04 08:33:53

标签: python python-wheel

我有Python轮文件:psutil-5.4.5-cp26-none-linux_x86_64.whl

如何列出此轮具有的依赖关系?

8 个答案:

答案 0 :(得分:12)

如前所述,.whl文件只是ZIP存档。你可以打开它们并在METADATA文件中找到它。

然而,有一种工具可以使这个手动过程更容易一些。您可以使用pkginfo,只需使用pip即可安装。

$ pip install pkginfo
$ pkginfo -f 'requires_dist' psutil-5.4.5-cp27-none-win32.whl
requires_dist: ["enum34; extra == 'enum'"]

答案 1 :(得分:4)

我只是试图解开(而不是gunzip)我躺着的轮包。 packagename-version.dist-info/METADATA文件包含Requires-Dist:条目列表,其中包含setup.py的已编译要求。

答案 2 :(得分:2)

您可以在单独的虚拟环境中安装wheel文件,然后查看所有其他软件包的安装位置。

答案 3 :(得分:0)

这是一个最小的片段,不需要你有任何外部工具(解压缩,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'  

答案 4 :(得分:0)

这是我在某个地方发现的帖子。我复制了所有内容并通过电子邮件发送给自己,因此我没有获得此答案的来源,但我认为这可能有所帮助。如果有人知道来源,我会删除这篇文章并将其链接到该帖子。

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

requirements.txt将具有包所需的所有要求。

答案 5 :(得分:0)

我使用安装pipenv pew的虚拟环境作为要求。 pew允许您安装在exit这些特殊虚拟环境中删除的临时虚拟环境。所以......

创建一个新的空虚拟环境并动态激活它:

pew mktmpenv -p /usr/bin/python3.6

安装您的包裹:

pip install somedistro

了解您的发行版的要求(以及要求的要求......):

pip list

停用并删除临时环境。

exit

此外,临时虚拟环境在打包测试中非常有用。

答案 6 :(得分:0)

通用答案,在unix中:使用strace

找到pid:

ps -C psutil
// Output example 1337

展示流程中的所有内容

sudo strace -p 1337

仅限Strace流程依赖项:

sudo strace -f -e open -p 1337

答案 7 :(得分:0)

不应在require_dist上添加单引号。

C:\> `pip install pkginfo` 
C:\> `pkginfo -f requires_dist psutil-5.4.5-cp27-none-win32.whl`
requires_dist: ["enum34; extra == 'enum'"]