conan search 默认查本地缓存,需加 --remote 才查询远程;若仍找不到包,可能是未上传、引用格式不匹配、未登录远程、服务端禁用搜索接口或二进制兼容性不匹配。

conan remote list 显示远程仓库但 search 找不到包
说明远程仓库地址配置正确,但包确实没上传成功,或上传时用了不匹配的引用格式。Conan 的 search 命令默认只查本地缓存,加 --remote 才走网络请求;漏掉这个参数就会误判“仓库里没包”。
常见错误现象:
-
conan search zlib/1.2.13返回空 —— 这是在查本地缓存,不是远程 -
conan search zlib/1.2.13 --remote=my-remote报错ERROR: Recipe not found—— 包未上传,或上传时用了zlib/1.2.13@user/channel格式,而你搜的是不带@的简写
实操建议:
- 确认上传命令是否带
@user/channel:比如conan upload "zlib/1.2.13@myteam/stable" -r my-remote --force - 上传后立即用完整引用搜索:
conan search "zlib/1.2.13@myteam/stable" --remote=my-remote - 检查远程仓库权限:
conan remote login my-remote -p "xxx" -r my-remote必须先登录,否则search会静默失败(尤其 Artifactory 等私有服务)
conan upload 后 conan search 仍返回 404
根本原因通常是远程仓库服务端未启用“包搜索”功能,或 Nginx/Apache 反向代理拦截了 /v2/conans/search 路径。Artifactory 社区版默认允许搜索,但某些自建 Nexus 或轻量代理部署会屏蔽该 endpoint。
验证方法:
- 手动 curl 测试:
curl -X GET "http://your-repo/v2/conans/search?q=zlib" -H "Authorization: Bearer xxx",看是否返回 403/404 - 检查 Artifactory 日志中是否有
SearchResource相关拒绝记录 - 确认仓库类型是
conan(不是 generic),且“Enable Conan Search”在 UI 中已勾选(Artifactory 7.80+)
临时绕过方式(仅调试):
- 直接访问
http://your-repo/artifactory/api/conan/my-repo/v1/conans/search?q=*(旧版 v1 接口) - 用
conan list替代(Conan 2.0+):conan list "zlib/*" --remote=my-remote,它不依赖 search endpoint
包上传成功但 install 时提示 “Cannot find package”
这不是找不到包,而是 Conan 客户端无法解析二进制兼容性。私有仓库里包存在,但 conan install 默认只匹配完全一致的 settings(如 os=Linux, arch=x86_64, compiler=gcc, compiler.version=11)。只要其中一项不匹配,就报“not found”,而非“package not in remote”。
排查步骤:
- 运行
conan install . -s os=Linux -s arch=x86_64 -s compiler=gcc -s compiler.version=11 --remote=my-remote --build=missing,显式传入构建环境 - 用
conan list "zlib/1.2.13@myteam/stable" --remote=my-remote查看实际上传的二进制列表,对比settings字段 - 检查
conan profile show default输出,确认 profile 中的compiler.version是否被自动截断(例如显示11但上传时是11.4)
容易被忽略的一点:Conan 2.x 默认开启 compatible_packages,但私有仓库若未配置 conan.conf 中的 [compatibility] 段,客户端可能不会 fallback 到兼容二进制 —— 此时需手动指定 --compatible 或改用 conan lock 精确控制。











