必须先完成远程仓库配置和登录,否则 conan upload 会报“remote not found”或“authentication failed”;需用 conan remote add 添加远程、conan remote login 登录,并通过 conan search -r 验证连通性与权限。

必须先完成远程仓库配置和登录,否则 conan upload 会直接报错“Remote not found”或“Authentication failed”——这不是网络问题,是本地 Conan 客户端根本没认出那个远程名。
确认远程仓库已添加并可访问
执行 conan remote list 查看当前注册的远程仓库。如果目标团队仓库(比如叫 team-remote)不在列表里,就得先加:
conan remote add team-remote https://your-artifactory.example.com/artifactory/api/conan/conan-team- 接着用
conan remote login team-remote -p your_password your_username登录(注意:密码参数-p后面不能有空格,且 Artifactory 默认用户是admin,首次登录后建议改密) - 验证是否通:运行
conan search "*" -r team-remote,能列出包说明连通且权限正常;若返回空但无错,说明仓库为空,也属正常
上传前必须确保包已本地存在且带完整引用
Conan 不接受“上传任意目录”,只上传本地缓存中已导出/创建好的包。常见错误是直接对源码目录跑 conan upload,结果提示“Package not found”。正确路径是:
- 先用
conan export-pkg(针对预编译库)或conan create(从源码构建)生成本地包,例如:conan export-pkg . mylib/1.2.0@team/stable -pr=myprofile - 再确认它真在本地缓存里:
conan search mylib/1.2.0@team/stable应该显示二进制 ID 列表 - 引用格式必须带
@user/channel,比如mylib/1.2.0@team/stable;漏掉@team/stable会被当成未命名包,上传时找不到匹配项
执行上传并处理常见失败点
核心命令是 conan upload,但参数组合决定成败:
- 上传单个包所有二进制:
conan upload "mylib/1.2.0@team/stable" --all -r team-remote(注意引号包裹引用,避免 shell 解析空格) - 只上传某个特定配置的二进制(比如只传 Linux x86_64 Release):
conan upload "mylib/1.2.0@team/stable" -r team-remote --pattern="*Linux*x86_64*Release*" - 如果报错
Permission denied for package,不是密码错,而是 Artifactory 的 repository 权限没开 write 给该用户组,需管理员在 UI 中给conan-teamrepo 分配Deploy/Cache权限 - 上传中断后重试,Conan 默认跳过已存在的二进制,不会重复覆盖——这点安全,但也要留意是否真传全了,可用
conan search -r team-remote mylib/1.2.0@team/stable对比本地输出
私有仓库上传后,别人怎么用?
上传成功不等于别人能立刻 conan install。关键遗漏点常在这里:
- 对方机器上也得执行过
conan remote add team-remote ...和conan remote login ...,否则conan install会默默 fallback 到 Conan Center,搜不到你的包 - 如果团队用的是 Artifactory 聚合仓库(virtual repo),确保它把
conan-team这个 local repo 加进了 included repositories 列表,否则 virtual repo 查不到 -
conanfile.py里写requires = "mylib/1.2.0@team/stable"没问题,但若用了version = "1.2.0"+user = "team"+channel = "stable"分字段写法,要确认conan install时没被 profile 或 lockfile 锁死成别的 user/channel
最易被忽略的是:上传命令里的 -r 参数必须和 conan remote add 时起的名完全一致,大小写敏感,且不能有空格;名字对不上,Conan 就当没这个远程,转头去传到 Conan Center(如果你没删默认 remote 的话),结果包发错了地方还浑然不知。











