如何确定未安装的Python包大小?
我剩下的空间不多,想要安装一些Python库。
我想知道在安装之前,一个Python库大概有多大(这样我就知道如果空间不够要申请多少额外的空间)。
有没有什么方法可以做到这一点,比如使用pip
?
3 个回答
1
这是我目前正在使用的脚本
(基于一个很棒的代码包,来自于如何查看已安装的pip包大小?)
步骤:
- 创建一个Python脚本,检查当前安装的所有pip包
- 创建一个Shell脚本,用来创建一个全新的Python环境并安装测试包
- 运行Shell脚本
- 赚到钱 :)
步骤 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
如果你有一个 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
9
根据我所知道的,使用 pip
是无法做到这一点的。不过,如果这个软件包在 PyPI 上托管,你可以在网址后面加上 /json
来查看更多详细信息,包括文件大小。
比如,你可以访问 https://pypi.python.org/pypi/pip/json,看看 releases
这个键里的内容。每个版本的 size
会告诉你下载的大小。
需要注意的是,这里显示的是下载的大小,而不是安装后的大小(因为一个软件包在安装时可能会需要额外的依赖,解压缩文件后也可能会占用更多空间)。所以在安装之前,你的问题可能很难回答。