本文目录导读:

方案1:基础清理脚本(适用于Linux/Mac)
#!/bin/bash # 文件名:clean_pip_cache.sh echo "开始清理pip缓存..." # 清理pip缓存 pip cache purge # 清理wheel缓存 pip install --no-cache-dir -U pip # 显示清理后的缓存大小 echo "当前pip缓存大小:" pip cache info echo "清理完成!"
方案2:更全面的清理脚本(多平台支持)
#!/bin/bash
# 文件名:clean_pip_cache_complete.sh
echo "====== pip缓存清理工具 ======"
# 获取当前平台
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
echo "检测到Linux系统"
CACHE_DIR="$HOME/.cache/pip"
elif [[ "$OSTYPE" == "darwin"* ]]; then
echo "检测到macOS系统"
CACHE_DIR="$HOME/Library/Caches/pip"
elif [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "cygwin" ]]; then
echo "检测到Windows系统"
CACHE_DIR="$USERPROFILE/pip/cache"
else
echo "未知系统类型,使用默认路径"
CACHE_DIR="$HOME/.cache/pip"
fi
# 显示当前缓存状态
echo "缓存目录: $CACHE_DIR"
echo "当前缓存大小:"
du -sh "$CACHE_DIR" 2>/dev/null || echo "无法获取缓存大小"
# 清理pip缓存
echo ""
echo "正在清理pip缓存..."
pip cache purge
# 清理wheelhouse缓存(如果存在)
WHEELHOUSE_DIR="$HOME/.wheelhouse"
if [ -d "$WHEELHOUSE_DIR" ]; then
echo "清理wheelhouse缓存..."
rm -rf "$WHEELHOUSE_DIR"
fi
# 清理临时文件
echo "清理临时文件..."
pip install --no-cache-dir -U pip 2>/dev/null
# 显示清理后的状态
echo ""
echo "清理完成!"
echo "新的缓存大小:"
pip cache info
# 可选:显示保存空间
OLD_SIZE=$(du -sh "$CACHE_DIR" 2>/dev/null | cut -f1)
echo "已清理缓存,节省了 $OLD_SIZE 空间" || echo "未知清理大小"
方案3:Python脚本(跨平台兼容性更好)
#!/usr/bin/env python3
# 文件名:clean_pip_cache.py
import os
import shutil
import subprocess
import platform
import sys
def get_pip_cache_dir():
"""获取pip缓存目录"""
system = platform.system().lower()
if system == "windows":
# Windows通常使用 %APPDATA%
return os.path.expandvars(r"%APPDATA%\pip\cache")
elif system == "darwin": # macOS
return os.path.join(os.path.expanduser("~"), "Library", "Caches", "pip")
else: # Linux and others
return os.path.join(os.path.expanduser("~"), ".cache", "pip")
def get_cache_size(path):
"""获取缓存目录大小"""
try:
total = 0
if os.path.exists(path):
for root, dirs, files in os.walk(path):
for f in files:
fp = os.path.join(root, f)
try:
total += os.path.getsize(fp)
except OSError:
pass
return total
except Exception as e:
print(f"无法计算缓存大小: {e}")
return 0
def format_size(bytes_size):
"""格式化文件大小"""
for unit in ['B', 'KB', 'MB', 'GB']:
if bytes_size < 1024:
return f"{bytes_size:.2f} {unit}"
bytes_size /= 1024
return f"{bytes_size:.2f} TB"
def clean_pip_cache():
"""清理pip缓存"""
print("====== pip缓存清理工具 ======")
cache_dir = get_pip_cache_dir()
print(f"检测到缓存目录: {cache_dir}")
# 获取清理前的缓存大小
old_size = get_cache_size(cache_dir)
print(f"当前缓存大小: {format_size(old_size)}")
# 方法1:使用pip命令清理
print("\n正在使用pip命令清理...")
try:
result = subprocess.run(
[sys.executable, "-m", "pip", "cache", "purge"],
capture_output=True,
text=True,
timeout=30
)
if result.returncode == 0:
print("pip cache purge执行成功")
if result.stdout:
print(result.stdout)
else:
print(f"pip命令执行失败: {result.stderr}")
except subprocess.TimeoutExpired:
print("命令执行超时")
except Exception as e:
print(f"执行pip命令出错: {e}")
# 方法2:手动删除缓存目录
print("\n正在手动清理缓存目录...")
if os.path.exists(cache_dir):
try:
shutil.rmtree(cache_dir)
print(f"成功删除缓存目录: {cache_dir}")
except PermissionError:
print(f"权限不足,无法删除: {cache_dir}")
print("尝试只清空目录内容...")
for item in os.listdir(cache_dir):
item_path = os.path.join(cache_dir, item)
try:
if os.path.isfile(item_path):
os.remove(item_path)
elif os.path.isdir(item_path):
shutil.rmtree(item_path)
print(f" 已删除: {item}")
except Exception as e:
print(f" 无法删除 {item}: {e}")
else:
print("缓存目录不存在,无需清理")
# 计算清理后的缓存大小
new_size = get_cache_size(cache_dir)
saved_space = old_size - new_size
print(f"\n====== 清理完成 ======")
print(f"原始缓存大小: {format_size(old_size)}")
print(f"当前缓存大小: {format_size(new_size)}")
print(f"节省空间: {format_size(saved_space)}")
if __name__ == "__main__":
clean_pip_cache()
方案4:增量清理脚本(保留最近使用的包)
#!/bin/bash # 文件名:clean_pip_cache_incremental.sh echo "增量清理pip缓存(保留最近使用过的包)..." # 清理超过30天未使用的缓存 find "$HOME/.cache/pip" -type f -atime +30 -delete 2>/dev/null # 清理空的目录 find "$HOME/.cache/pip" -type d -empty -delete 2>/dev/null echo "清理完成!保留最近30天内使用的缓存。" pip cache info
使用说明
-
赋予执行权限(Linux/Mac):
chmod +x clean_pip_cache.sh
-
运行脚本:
# Bash脚本 ./clean_pip_cache.sh # Python脚本 python3 clean_pip_cache.py
-
设置定时任务(可选,Linux/Mac):
# 每月自动清理 crontab -e # 添加以下行(每月1号凌晨2点执行) 0 2 1 * * /path/to/clean_pip_cache.sh
注意事项
- 备份重要数据:清理前建议确认没有正在使用的包
- 权限问题:Windows可能需要管理员权限
- 虚拟环境:如果使用virtualenv或conda,清理的是全局缓存
- 生产环境:建议在非工作时间执行清理
选择最适合你平台的脚本执行即可。