系统安装Conan后,是否仍需pip安装才能使用conanfile.py?
Conan 导入错误问题解决
问题描述
我在Windows系统通过官方.exe安装包安装了Conan,使用conanfile.txt安装软件包完全正常,但尝试通过conanfile.py安装时出现以下错误:
======== Input profiles ======== Profile host: [settings] arch=x86_64 build_type=Release compiler=msvc compiler.cppstd=14 compiler.runtime=dynamic compiler.runtime_type=Release compiler.version=194 os=Windows Profile build: [settings] arch=x86_64 build_type=Release compiler=msvc compiler.cppstd=14 compiler.runtime=dynamic compiler.runtime_type=Release compiler.version=194 os=Windows ERROR: Error loading conanfile at 'C:\Users\YawManu\source\repos\CMakeProject1\conanfile.py': Unable to load conanfile in C:\Users\YawManu\source\repos\CMakeProject1\conanfile.py File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed File "C:\Users\YawManu\source\repos\CMakeProject1\conanfile.py", line 3, in <module> from conan import Conanfile ImportError: cannot import name 'Conanfile' from 'conan' (C:\Program Files\Conan\conan\_internal\conan\__init__.pyc)
我的conanfile.py内容如下:
import os from conan import Conanfile class ProjectRecipe(Conanfile): settings = "os", "compiler", "build_type", "arch" generators = "CMakeToolchain", "CMakeDeps" def requirements(self): self.requires("armadillo/12.6.4") self.requires("boost/1.86.0") self.requires("openssl/3.3.1") self.requires("onnxruntime/1.18.1")
请问我是否需要在系统安装之外额外执行pip install conan命令?
解决方案
不需要额外执行pip install conan,问题根源是你安装的是Conan 1.x版本,但写的是Conan 2.x的API语法:
- Conan 1.x的导入语句是
from conans import ConanFile(注意包名是conans,类名首字母大写ConanFile) - 你写的
from conan import Conanfile是Conan 2.x的语法,1.x环境中没有这个导入路径,所以触发错误
你有两种解决方向:
1. 升级到Conan 2.x
卸载当前的Conan 1.x,去官网下载Conan 2.x的.exe安装包重新安装,你的现有conanfile.py代码无需修改,可直接使用。Conan 2.x对cmake_find_package等旧生成器也有兼容支持,同时原生支持CMakeToolchain和CMakeDeps。
2. 适配Conan 1.x修改代码
如果暂时不想升级,需要调整conanfile.py的写法:
- 把导入语句改为
from conans import ConanFile - 替换生成器,Conan 1.x没有
CMakeToolchain和CMakeDeps,可以改用cmake_find_package和cmake_paths:generators = "cmake_find_package", "cmake_paths"
另外,conanfile.txt能正常工作是因为Conan 1.x和2.x都兼容这种基础的依赖声明格式,没有涉及版本差异较大的Python API,所以没有报错。
内容的提问来源于stack exchange,提问作者Yaw Sparrow
相关产品推荐
相关产品推荐

