如何使用Conan从Artifactory通用仓库下载Zip包?
问题解答
首先明确:conan install --requires确实无法直接下载非Conan包,你的理解是正确的——该命令仅针对遵循Conan规范的包(包含conanfile元数据结构的包),普通zip文件不符合要求。
报错原因分析
你添加的Conan远程地址指向了Conan仓库的API路径,但你的test仓库是Generic类型,并非Conan专用仓库。Conan的download命令会尝试调用Conan仓库的特定API接口,而Generic仓库不支持这些接口,因此返回404错误。
解决方法
方案1:将文件转为Conan包上传(推荐,贴合Conan生态)
如果可以调整仓库或包的形式,建议把zip文件封装成Conan包:
- 编写简单的
conanfile.py:from conan import ConanFile from conan.tools.files import copy class FAPackage(ConanFile): name = "fa" version = "1.0" exports_sources = "fa.zip" def package(self): copy(self, "fa.zip", self.source_folder, self.package_folder) - 本地打包:
conan create . - 上传到Artifactory的Conan类型仓库(需先创建Conan仓库,或把现有Generic仓库转为Conan类型),之后即可用常规Conan命令下载:
conan install --requires=fa/1.0@your_user/your_channel -r conan-af
方案2:通过自定义Conan Recipe下载文件
如果不想修改仓库类型或封装包,可以编写自定义Conan recipe,利用Conan的工具链下载Generic仓库的文件:
- 创建
conanfile.py:from conan import ConanFile from conan.tools.files import download, unzip class FAZipDownloader(ConanFile): name = "fa_zip" version = "1.0" def package(self): # 使用Generic仓库的直接文件URL url = "https://artifactory.domain.dev/artifactory/test/components/FA/fa.zip" # 下载到Conan包目录,可根据需求修改路径 download(self, url, f"{self.package_folder}/fa.zip") # 如需自动解压,取消下面注释 # unzip(self, f"{self.package_folder}/fa.zip", self.package_folder) - 在该文件目录下执行:
Conan会自动执行下载逻辑,将文件存入本地缓存或指定目录。conan install .
方案3:直接用curl/wget下载(最简单)
既然直接访问URL可正常下载,也可以跳过Conan,用常规工具下载:
# curl示例(替换为你的账号密码) curl -u your_username:your_password https://artifactory.domain.dev/artifactory/test/components/FA/fa.zip -o fa.zip
内容的提问来源于stack exchange,提问作者Veljko
相关产品推荐
相关产品推荐

