如何确定未安装的python包的大小?

时间:2014-07-09 17:50:48

标签: python pip

我没有太多空间,我很想安装python库。

我想知道安装之前python库的大小(只是为了知道如果我没有足够的空间请求多少空间)。

有没有办法做到这一点,例如使用pip

3 个答案:

答案 0 :(得分:3)

据我所知,这不可能使用pip。但是如果包托管在PyPI上,您可以将/json附加到URL以查看更多详细信息,包括文件大小。

例如,访问https://pypi.python.org/pypi/pip/json并查看releases项中的条目。每个版本的size告诉您下载量有多大。

请注意,这会告诉您下载大小,而不是安装后的大小(因为程序包可能会在解压缩归档后请求安装的其他依赖项,等等)。因此,在安装之前,您的问题可能很难回答。

答案 1 :(得分:0)

这是我目前使用的脚本

(基于来自 How to see pip package sizes installed? 的优秀的包裹遍历代码)

步骤:

  1. 创建一个python脚本来检查所有当前安装的pip包
  2. 创建一个shell脚本来创建一个全新的python环境并安装包进行测试
  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


答案 2 :(得分:0)

如果您有 requirements.txt 文件,请使用此脚本:

#!/bin/bash
# by rubo77: https://stackoverflow.com/a/68278901/1069083

mkdir -p /tmp/pip-size
for i in $(pip-sync -n requirements.txt|tail -n +2); do
  echo -ne "$i:\t"
  wget --quiet -O /tmp/pip-size/$i https://pypi.org/pypi/$i/json
  cat /tmp/pip-size/$i | jq 'last(.releases[])'[].size | paste -sd+ | bc > /tmp/pip-size/$i.size
  cat /tmp/pip-size/$i.size | awk '{$1=$1/1024/1024; print $1,"MB";}'
done
echo -e "--------\ntotal:"
cat /tmp/pip-size/*.size  | paste -sd+ | bc | awk '{$1=$1/1024/1024; print $1,"MB";}';

输出示例:

ninja:  1.4366 MB
numpy:  120.735 MB
opencv-python:  724.788 MB
pillow: 137.695 MB
scikit-image:   7.46707 MB
torch:  4772.73 MB
torchvision:    153.842 MB
--------
total:
5918.69 MB