必须删除本地包以解决缓存污染、abi不兼容、远程包找不到等问题;常用conan remove "pkg/*" --force删指定包,--older-than=30删过期包,-p myprofile精准清理某profile二进制,删后需检查remote、profile配置及元数据完整性。

能删,而且经常需要删——但不能乱删,否则 conan install 会失败、构建中断、甚至污染后续环境。
什么时候必须删本地包
不是所有缓存都值得保留。以下场景不清理,问题会越积越多:
-
conan install报错ERROR: Cannot find package 'xxx/1.2.3',但远程明明有——大概率是本地缓存里残留了旧版conanfile.py或损坏的元数据 - 切换 profile(比如从
gcc11换到clang15)后,conan install仍试图复用旧二进制,结果链接失败或 ABI 不兼容 - CI 构建中出现“同一包多个版本共存但被误选”,根源常是缓存里混着不同
user/channel的同名包,比如zlib/1.2.11@conan/stable和zlib/1.2.11@myteam/testing - 磁盘告警:缓存目录
~/.conan2超过 20GB,其中 70% 是已弃用的旧工具链或测试分支构建产物
conan remove 的三种安全删法
别直接 rm -rf ~/.conan2——它会清掉 profile、remote 配置、甚至 global.conf,下次 conan login 都得重配。
- 删指定包(最常用):
conan remove "zlib/*"—— 匹配所有 zlib 版本;加--force跳过确认(CI 脚本必备) - 删过期包(推荐定期跑):
conan remove "*" --older-than=30 --confirm—— 注意:这是按“最后访问时间”而非“安装时间”,对长期未用但仍有用的包也生效 - 删某 profile 下的全部二进制:
conan remove "*" -p myprofile --force—— 精准清理,不影响其他 profile 缓存
⚠️ 注意:conan remove 默认只删二进制包(package),不删配方(recipe)。如果想连配方一起删,加 --recipes 参数,但多数情况没必要——配方体积小,且删了再装也快。
删完之后 conan install 还失败?检查这三处
删包只是第一步,常见连锁问题如下:
- 远程仓库没配对:删完后
conan install提示ERROR: Remote 'conancenter' not found—— 执行conan remote list确认,缺就补conan remote add conancenter https://center.conan.io - profile 里编译器路径失效:比如删包后换了个 GCC 版本,但 profile 还指着旧
compiler.version=11,会导致新包找不到匹配二进制——用conan profile show myprofile核对关键字段 - 缓存元数据损坏:极少数情况下删一半出错,
conan install卡在Resolving dependencies—— 此时可手动删~/.conan2/p(package 目录)下对应子目录,或干脆重建缓存:rm -rf ~/.conan2 && conan config init
真正麻烦的不是删,而是删完不知道该不该重装、从哪重装、装哪个版本。缓存目录结构本身([ref]/[revision]/[package_id])决定了删和装必须成对理解——删的是具体 package_id,而装的时候 Conan 会根据当前 profile + conanfile.py 重新计算这个 ID。漏看这一层,就容易反复踩坑。











