You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计Python requirements.txt或pip freeze输出包的总大小?

统计Python包总存储空间的方法

场景1:统计已安装的所有包(对应pip freeze输出)

方法1:Shell命令(Unix/Linux/macOS,或Windows下用WSL/Git Bash)

直接执行以下命令,自动计算所有已安装pip包的总大小:

pip freeze | xargs -n1 pip show | grep -E 'Location:|Name:' | paste -d ' ' - - | awk '{print $2 "/" $4}' | xargs du -shc | tail -n1

命令逻辑:

  • 用pip freeze列出所有已安装包
  • 逐个调用pip show获取包的安装位置和名称
  • 拼接成包的实际存储路径
  • 用du计算每个路径的大小并汇总求和

方法2:Python脚本(跨平台,支持Windows/macOS/Linux)

创建calc_pkg_size.py脚本,运行后直接输出总大小:

import os
import subprocess
import sys

def get_package_size(package_name):
    try:
        show_output = subprocess.check_output(
            [sys.executable, "-m", "pip", "show", package_name],
            text=True,
            stderr=subprocess.DEVNULL
        )
        location = None
        for line in show_output.splitlines():
            if line.startswith("Location:"):
                location = line.split(": ")[1].strip()
                break
        if not location:
            return 0
        
        pkg_dir_name = package_name.replace("-", "_")
        pkg_path = os.path.join(location, pkg_dir_name)
        if not os.path.exists(pkg_path):
            pkg_path = os.path.join(location, package_name)
            if not os.path.exists(pkg_path):
                return 0
        
        total_size = 0
        for root, _, files in os.walk(pkg_path):
            for file in files:
                file_path = os.path.join(root, file)
                try:
                    total_size += os.path.getsize(file_path)
                except OSError:
                    continue
        return total_size
    except subprocess.CalledProcessError:
        return 0

def format_size(size_bytes):
    for unit in ['B', 'KB', 'MB', 'GB']:
        if size_bytes < 1024.0:
            return f"{size_bytes:.2f} {unit}"
        size_bytes /= 1024.0
    return f"{size_bytes:.2f} TB"

def main():
    freeze_output = subprocess.check_output(
        [sys.executable, "-m", "pip", "freeze"],
        text=True
    ).splitlines()
    package_names = [pkg.split("==")[0].strip() for pkg in freeze_output if "==" in pkg]
    
    total_bytes = 0
    for pkg in package_names:
        total_bytes += get_package_size(pkg)
    
    print(f"已安装包总存储空间: {format_size(total_bytes)}")

if __name__ == "__main__":
    main()

运行脚本:

python calc_pkg_size.py

场景2:统计requirements.txt中指定包的总大小

方法1:Shell命令(Unix/Linux/macOS)

确保requirements.txt中的包已安装,执行以下命令:

cat requirements.txt | grep -v '^#' | xargs -n1 pip show | grep -E 'Location:|Name:' | paste -d ' ' - - | awk '{print $2 "/" $4}' | xargs du -shc | tail -n1

说明:grep -v '^#'会忽略requirements.txt中的注释行。

方法2:修改Python脚本支持读取requirements.txt

修改calc_pkg_size.py的main函数,使其支持传入requirements.txt路径:

def main():
    if len(sys.argv) != 2:
        print("用法: python calc_pkg_size.py <requirements文件路径>")
        sys.exit(1)
    
    req_file_path = sys.argv[1]
    with open(req_file_path, 'r', encoding='utf-8') as f:
        lines = [line.strip() for line in f if line.strip() and not line.startswith("#")]
    
    package_names = []
    for line in lines:
        if any(op in line for op in ["==", ">=", "<=", ">", "<", "~="]):
            op = next((o for o in ["==", ">=", "<=", ">", "<", "~="] if o in line), None)
            pkg_name = line.split(op)[0].strip()
        else:
            pkg_name = line.strip()
        package_names.append(pkg_name)
    
    total_bytes = 0
    for pkg in package_names:
        total_bytes += get_package_size(pkg)
    
    print(f"requirements.txt中包总存储空间: {format_size(total_bytes)}")

运行脚本:

python calc_pkg_size.py requirements.txt

内容的提问来源于stack exchange,提问作者AJR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 09:57:25