如何查看安装的pip包大小?

时间:2015-12-14 11:40:59

标签: python linux debian pip

我不确定这是可能的。谷歌似乎没有任何答案。

运行Linux Debian可以列出已安装的所有pip包和大小(使用的磁盘空间量)吗?

即。列出磁盘大小的所有pip个包?

10 个答案:

答案 0 :(得分:15)

请尝试这个(虽然有点长,也许有更好的解决方案):

$ pip list | xargs pip show | grep -E 'Location:|Name:' | cut -d ' ' -f 2 | paste -d ' ' - - | awk '{print $2 "/" tolower($1)}' | xargs du -sh 2> /dev/null

输出应如下所示:

80K     /home/lord63/.pyenv/versions/2.7.11/envs/py2/lib/python2.7/site-packages/blinker
3.8M    /home/lord63/.pyenv/versions/2.7.11/envs/py2/lib/python2.7/site-packages/docutils
296K    /home/lord63/.pyenv/versions/2.7.11/envs/py2/lib/python2.7/site-packages/ecdsa
340K    /home/lord63/.pyenv/versions/2.7.11/envs/py2/lib/python2.7/site-packages/execnet
564K    /home/lord63/.pyenv/versions/2.7.11/envs/py2/lib/python2.7/site-packages/fabric
1.4M    /home/lord63/.pyenv/versions/2.7.11/envs/py2/lib/python2.7/site-packages/flask
316K    /home/lord63/.pyenv/versions/2.7.11/envs/py2/lib/python2.7/site-packages/httplib2
1.9M    /home/lord63/.pyenv/versions/2.7.11/envs/py2/lib/python2.7/site-packages/jinja2
...
如果软件包安装在Location/Name中,

应该有效。 (位置和名称来自pip show <package>

pip show <package>会显示位置:

---
Metadata-Version: 2.0
Name: Flask
Version: 0.10.1
Summary: A microframework based on Werkzeug, Jinja2 and good intentions
Home-page: http://github.com/mitsuhiko/flask/
Author: Armin Ronacher
Author-email: armin.ronacher@active-4.com
License: BSD
Location: /home/lord63/.pyenv/versions/2.7.11/envs/py2/lib/python2.7/site-packages
Requires: itsdangerous, Werkzeug, Jinja2

我们让NameLocation加入他们以获取位置,最后使用du -sh来获取包大小。

答案 1 :(得分:5)

新版本的新点子列表格式:

pip2 list --format freeze|awk -F = {'print $1'}| xargs pip2 show | grep -E 'Location:|Name:' | cut -d ' ' -f 2 | paste -d ' ' - - | awk '{print $2 "/" tolower($1)}' | xargs du -sh 2> /dev/null|sort -h

答案 2 :(得分:2)

上面针对点子版本18和更高版本进行了修改:

pip list | tail -n +3 | awk '{print $1}' | xargs pip show | grep -E 'Location:|Name:' | cut -d ' ' -f 2 | paste -d ' ' - - | awk '{print $2 "/" tolower($1)}' | xargs du -sh 2> /dev/null | sort -hr

此命令显示pip软件包,按大小降序排列。

答案 3 :(得分:2)

我按照以下步骤计算所有软件包的磁盘使用量

  1. pip3 show "some_package" | grep "Location:"
  2. 这将返回path / to / all / packages
  3. du -h path/to/all/packages
  4. 最后一行将以MB为单位包含所有软件包的大小

注意-仅插入软件包名称代替某些软件包,例如熊猫, 保持 grep“位置:” 不变

奖金-查找特定点子包的大小

  1. pip3 show "package_name" | grep "Location:"

  2. 这将返回路径/到/所有/包

  3. du -h path/to/all/packages/package_name

答案 4 :(得分:2)

如何

 $ du -h -d 1 "$(pip -V | cut -d ' ' -f 4 | sed 's/pip//g')" | grep -vE "dist-info|_distutils_hack|__pycache__" | sort -h

优点

无需转换这些:
案例 (Django:django)
连字符 (django-q:django_q)
命名 (djangorestframework-gis:rest_framework_gis)

缺点

依赖项和一些未知目录也显示出来...

答案 5 :(得分:2)

不过,有一种简单的 Pythonic 方法可以找到它。

这是代码。我们将此文件称为 pipsize.py

import os
import pkg_resources

def calc_container(path):
    total_size = 0
    for dirpath, dirnames, filenames in os.walk(path):
        for f in filenames:
            fp = os.path.join(dirpath, f)
            total_size += os.path.getsize(fp)
    return total_size



dists = [d for d in pkg_resources.working_set]

for dist in dists:
    try:
        path = os.path.join(dist.location, dist.project_name)
        size = calc_container(path)
        if size/1000 > 1.0:
            print (f"{dist}: {size/1000} KB")
            print("-"*40)
    except OSError:
        '{} no longer exists'.format(dist.project_name)

当使用 python pipsize.py 运行时,会打印出类似的内容

pip 21.1.2: 8651.906 KB
----------------------------------------
numpy 1.20.3: 25892.871 KB
----------------------------------------
numexpr 2.7.3: 1627.361 KB
----------------------------------------
zict 2.0.0: 48.54 KB
----------------------------------------
yarl 1.6.3: 1395.888 KB
----------------------------------------
widgetsnbextension 3.5.1: 4609.962 KB
----------------------------------------
webencodings 0.5.1: 54.768 KB
----------------------------------------
wcwidth 0.2.5: 452.214 KB
----------------------------------------
uvicorn 0.14.0: 257.515 KB
----------------------------------------
tzlocal 2.1: 67.11 KB
----------------------------------------
traitlets 5.0.5: 800.71 KB
----------------------------------------
tqdm 4.61.0: 289.412 KB
----------------------------------------
tornado 6.1: 2898.264 KB

答案 6 :(得分:1)

转到包裹网站查找尺寸,例如https://pypi.python.org/pypi/pip/json

答案 7 :(得分:1)

历史记录:

目前没有为此目的开发的命令或应用程序,我们需要手动检查

手动方法I:

du /usr/lib/python3.5/ --max-depth=2 | sort -h
du /usr/lib64/python3.5/ --max-depth=2 | sort -h

这不包括从该目录安装的软件包/文件,因此我们将使用这两个简单命令获得95%

此外,如果您安装了其他版本的python,则需要调整目录

手动方法II:

pip list | sed '/Package/d' | sed '/----/d' | sed -r 's/\S+//2' | xargs pip show | grep -E 'Location:|Name:' | cut -d ' ' -f 2 | paste -d ' ' - - | awk '{print $2 "/" $(find $2 -maxdepth 1 -iname $1)}' | xargs du -sh  | sort -h

使用不区分大小写的包名称搜索安装目录

手动方法II备选方案I:

pip list | sed '/Package/d' | sed '/----/d' | sed -r 's/\S+//2' | xargs pip show | grep -E 'Location:|Name:' | cut -d ' ' -f 2 | paste -d ' ' - -| awk '{print $2 "/" tolower($1)}' | xargs du -sh | sort -h

使用包含小写的包名称

搜索安装目录

手动方法II备选方案II:

pip list | sed '/Package/d' | sed '/----/d' | sed -r 's/\S+//2' | xargs pip show | grep -E 'Location:|Name:' | cut -d ' ' -f 2 | paste -d ' ' - -| awk '{print $2 "/" $1}' | xargs du -sh | sort -h

使用包名称

搜索安装目录

注意:

对于所有方法II,需要手动检查以du: cannot access开头的行 该命令采取安装目录,并添加包的名称,但有时名称不同于包名称那些替代方法努力以某种方式搜索目录... 对于愿意开发应用程序的人来说,这可能是一个良好的开端。

简化:

  • 使用第一种方法
  • 使用第二种方法,只需在python经典目录外手动打包

答案 8 :(得分:1)

以上所有解决方案都没有列出带有破折号的包:PIP 将它们转换为文件夹名称中的下划线:

pip list --format freeze | awk -F = {'print $1'} | xargs pip show | grep -E 'Location:|Name:' | cut -d ' ' -f 2 | paste -d ' ' - - | awk '{gsub("-","_",$1); print $2 "/" tolower($1)}' | xargs du -sh 2> /dev/null | sort -h

对于 Mac 用户:

pip3 list --format freeze | awk -F = {'print $1'} | xargs pip3 show | grep -E 'Location:|Name:' | cut -d ' ' -f 2 | paste -d ' ' - - | awk '{gsub("-","_",$1); print $2 "/" tolower($1)}' | xargs du -sh 2> /dev/null | sort -h

答案 9 :(得分:0)

您可以自行运行所有当前包的第 1 部分 python tool-size.py 将为您汇总它们

如果您想知道特定 pip 包的确切大小,包括其所有依赖项,我已经创建了一个小 bash 和 python 组合来实现这一点

(基于上面https://stackoverflow.com/a/67914559/3248788 上优秀的包裹行走代码答案)

步骤:

  1. 创建一个python脚本来检查所有当前安装的pip包
  2. 创建一个shell脚本来创建一个全新的python环境并安装包进行测试,并运行步骤1中的脚本
  3. 运行shell脚本
  4. 利润:)

步骤 1

创建一个名为 tool-size.py 的 python 脚本

#!/usr/bin/env python

import os
import pkg_resources

def calc_container(path):
    total_size = 0
    for dirpath, dirnames, filenames in os.walk(path):
        for f in filenames:
            fp = os.path.join(dirpath, f)
            total_size += os.path.getsize(fp)
    return total_size

def calc_installed_sizes():
    dists = [d for d in pkg_resources.working_set]

    total_size = 0
    print (f"Size of Dependencies")
    print("-"*40)
    for dist in dists:
        # ignore pre-installed pip and setuptools
        if dist.project_name in ["pip", "setuptools"]:
            continue
        try:
            path = os.path.join(dist.location, dist.project_name)
            size = calc_container(path)
            total_size += size
            if size/1000 > 1.0:
                print (f"{dist}: {size/1000} KB")
                print("-"*40)
        except OSError:
            '{} no longer exists'.format(dist.project_name)

    print (f"Total Size (including dependencies): {total_size/1000} KB")

if __name__ == "__main__":
    calc_installed_sizes()

步骤 2

创建一个名为 tool-size.sh 的 bash 脚本

#!/usr/bin/env bash

# uncomment to to debug
# set -x

rm -rf ~/.virtualenvs/tool-size-tester
python -m venv ~/.virtualenvs/tool-size-tester
source ~/.virtualenvs/tool-size-tester/Scripts/activate
pip install -q $1
python tool-size.py
deactivate

步骤 3

用你想要获取大小的包运行脚本

tool-size.sh xxx

说 truffleHog3

$ ./tool-size.sh truffleHog3

Size of Dependencies
----------------------------------------
truffleHog3 2.0.6: 56.46 KB
----------------------------------------
smmap 4.0.0: 108.808 KB
----------------------------------------
MarkupSafe 2.0.1: 40.911 KB
----------------------------------------
Jinja2 3.0.1: 917.551 KB
----------------------------------------
gitdb 4.0.7: 320.08 KB
----------------------------------------
Total Size (including dependencies): 1443.81 KB