实现输出当前环境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/