upgrade_all_packages.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. """
  4. 升级所有已安装的Python包到最新版本
  5. """
  6. import subprocess
  7. import sys
  8. def upgrade_all_packages():
  9. """升级所有已安装的包"""
  10. # 获取所有已安装的包
  11. result = subprocess.run(
  12. [sys.executable, '-m', 'pip', 'list', '--format=freeze'],
  13. capture_output=True,
  14. text=True,
  15. encoding='utf-8'
  16. )
  17. if result.returncode != 0:
  18. print(f"错误: 无法获取包列表\n{result.stderr}")
  19. return
  20. packages = []
  21. for line in result.stdout.strip().split('\n'):
  22. if line and '==' in line:
  23. package_name = line.split('==')[0].strip()
  24. if package_name and package_name != 'pip':
  25. packages.append(package_name)
  26. print(f"Found {len(packages)} packages to check for upgrades...")
  27. # 升级每个包
  28. upgraded = 0
  29. failed = 0
  30. for i, package in enumerate(packages, 1):
  31. print(f"\n[{i}/{len(packages)}] Upgrading {package}...")
  32. result = subprocess.run(
  33. [sys.executable, '-m', 'pip', 'install', '--upgrade', package],
  34. capture_output=True,
  35. text=True,
  36. encoding='utf-8'
  37. )
  38. if result.returncode == 0:
  39. print(f"[OK] {package} upgraded successfully")
  40. upgraded += 1
  41. else:
  42. print(f"[FAIL] {package} upgrade failed: {result.stderr[:200]}")
  43. failed += 1
  44. print(f"\n{'='*60}")
  45. print(f"Upgrade completed!")
  46. print(f"Success: {upgraded} packages")
  47. print(f"Failed: {failed} packages")
  48. print(f"{'='*60}")
  49. if __name__ == '__main__':
  50. upgrade_all_packages()