import subprocess
import os
def get_installed_packages():
# 获取所有安装的包
result = subprocess.run(['pip', 'list'], stdout=subprocess.PIPE, text=True, errors='ignore')
lines = result.stdout.split('\n')
packages = []
for line in lines[2:]: # 跳过前两行表头
if line:
packages.append(line.split()[0])
return packages
def get_package_size(package_name):
# 获取包的安装位置
result = subprocess.run(['pip', 'show', package_name], stdout=subprocess.PIPE, text=True, errors='ignore')
lines = result.stdout.split('\n')
for line in lines:
if line.startswith('Location:'):
location = line.split(' ', 1)[1]
package_path = os.path.join(location, package_name)
# 计算包的大小
total_size = 0
for dirpath, dirnames, filenames in os.walk(package_path):
for f in filenames:
fp = os.path.join(dirpath, f)
total_size += os.path.getsize(fp)
return total_size
return None
if __name__ == '__main__':
packages = get_installed_packages()
for package in packages:
size = get_package_size(package)
if size is not None:
print(f"Package: {package}, Size: {size / (1024 * 1024):.2f} MB")
else:
print(f"Package: {package}, Size: Not found")
运行过后会出现然后就可以自己看看需要卸载哪些不用的,但是很大的那些包
还可以排序输出最大的10个包名称和大小
import subprocess
import os
def get_installed_packages():
# 获取所有安装的包
result = subprocess.run(['pip', 'list'], stdout=subprocess.PIPE, text=True, errors='ignore')
lines = result.stdout.split('\n')
packages = []
for line in lines[2:]: # 跳过前两行表头
if line:
packages.append(line.split()[0])
return packages
def get_package_size(package_name):
# 获取包的安装位置
result = subprocess.run(['pip', 'show', package_name], stdout=subprocess.PIPE, text=True, errors='ignore')
lines = result.stdout.split('\n')
for line in lines:
if line.startswith('Location:'):
location = line.split(' ', 1)[1]
package_path = os.path.join(location, package_name)
# 计算包的大小
total_size = 0
for dirpath, dirnames, filenames in os.walk(package_path):
for f in filenames:
fp = os.path.join(dirpath, f)
total_size += os.path.getsize(fp)
return total_size
return None
if __name__ == '__main__':
packages = get_installed_packages()
package_sizes = []
for package in packages:
size = get_package_size(package)
if size is not None:
package_sizes.append((package, size))
# 按大小排序并取前10个
package_sizes.sort(key=lambda x: x[1], reverse=True)
top_packages = package_sizes[:10]
for package, size in top_packages:
print(f"Package: {package}, Size: {size / (1024 * 1024):.2f} MB")