Python实现输出当前环境pip已安装包大小等信息

本文介绍了一个Python脚本,它通过调用`pip`命令获取当前环境中已安装软件包的名称、版本、大小以及主页地址,用于显示系统中各个包的相关信息。
摘要由CSDN通过智能技术生成

实现输出当前环境pip已安装包的信息,信息内容包含包名称、版本、大小和主页地址。

# -*- coding: utf-8 -*-
import subprocess
import os


def format_size(size_in_bytes):
    if size_in_bytes < 1024:
        return f"{size_in_bytes} bytes"
    elif size_in_bytes < 1024 * 1024:
        return f"{size_in_bytes / 1024:.2f} KB"
    else:
        return f"{size_in_bytes / (1024 * 1024):.2f} MB"


def get_package_info(package_name):
    try:
        package_info = subprocess.check_output(
            ['pip', 'show', package_name]).decode()
        package_info_dict = {}
        for line in package_info.split('\n'):
            if line.strip():
                key, value = line.split(': ', 1)
                package_info_dict[key.strip()] = value.strip()
        return package_info_dict
    except Exception as e:
        print(f"Error getting information for package {package_name}: {e}")
        return {}


def get_package_sizes():
    installed_packages = subprocess.check_output(
        ['pip', 'freeze']).decode().split('\n')
    package_info_list = []
    for package_info in installed_packages:
        if package_info.strip():  # 跳过空行
            package_name = package_info.split('==')[0]
            try:
                # 获取包所在目录大小
                package_dir = subprocess.check_output(
                    ['pip', 'show', '--no-cache-dir', package_name]).decode()
                package_dir = [line.split(': ')[1].strip() for line in package_dir.split(
                    '\n') if line.startswith('Location: ')][0]
                dir_size = sum(os.path.getsize(os.path.join(root, filename))
                               for root, _, filenames in os.walk(package_dir) for filename in filenames)
                package_info = get_package_info(package_name)
                package_info['Size'] = format_size(dir_size)
                package_info_list.append(package_info)
            except Exception as e:
                print(f"Error getting size for package {package_name}: {e}")
    return package_info_list

def main():
    package_infos = get_package_sizes()
    for package_info in package_infos:
        print(f"Name: {package_info.get('Name', ''):20} | Version: {package_info.get('Version', ''):10} | Size: {package_info.get('Size', ''):10} | Home-page: {package_info.get('Home-page', '')}")


if __name__ == "__main__":
    main()
  • 执行输出结果
Name: certifi              | Version: 2024.2.2   | Size: 8.07 MB    | Home-page: https://github.com/certifi/python-certifi
Name: charset-normalizer   | Version: 3.3.2      | Size: 8.07 MB    | Home-page: https://github.com/Ousret/charset_normalizer
Name: colorama             | Version: 0.4.6      | Size: 8.07 MB    | Home-page: 
Name: conan                | Version: 2.0.17     | Size: 8.07 MB    | Home-page: https://conan.io
Name: fasteners            | Version: 0.19       | Size: 8.07 MB    | Home-page: https://github.com/harlowja/fasteners
Name: idna                 | Version: 3.6        | Size: 8.07 MB    | Home-page: 
Name: Jinja2               | Version: 3.1.3      | Size: 8.07 MB    | Home-page: https://palletsprojects.com/p/jinja/
Name: MarkupSafe           | Version: 2.1.5      | Size: 8.07 MB    | Home-page: https://palletsprojects.com/p/markupsafe/
Name: patch-ng             | Version: 1.17.4     | Size: 8.07 MB    | Home-page: https://github.com/conan-io/python-patch
Name: pycairo              | Version: 1.25.1     | Size: 29.03 MB   | Home-page: https://pycairo.readthedocs.io
Name: PyGObject            | Version: 3.46.0     | Size: 29.03 MB   | Home-page: https://pygobject.readthedocs.io
Name: python-dateutil      | Version: 2.8.2      | Size: 8.07 MB    | Home-page: https://github.com/dateutil/dateutil
Name: PyYAML               | Version: 6.0.1      | Size: 8.07 MB    | Home-page: https://pyyaml.org/
Name: requests             | Version: 2.31.0     | Size: 8.07 MB    | Home-page: https://requests.readthedocs.io
Name: six                  | Version: 1.16.0     | Size: 8.07 MB    | Home-page: https://github.com/benjaminp/six
Name: stcgal               | Version: 1.10       | Size: 29.03 MB   | Home-page: https://github.com/grigorig/stcgal
Name: tqdm                 | Version: 4.66.1     | Size: 29.03 MB   | Home-page: 
Name: urllib3              | Version: 1.26.18    | Size: 8.07 MB    | Home-page: https://urllib3.readthedocs.io/
  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逢生博客

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值