使用Conan安装sdl_mixer失败,寻求解决办法
问题:添加SDL_mixer依赖时Conan导入CMake失败
我有一个基于SDL2、SDL_image和SDL_ttf的项目,想要为其添加SDL_mixer依赖。当前的conanfile.py内容如下:
from conan import ConanFile class CompressorRecipe(ConanFile): settings = "os", "compiler", "build_type", "arch" generators = "CMakeToolchain", "CMakeDeps" def build_requirements(self): self.tool_requires("cmake/3.27.0") def requirements(self): self.requires("sdl_image/2.0.5") self.requires("sdl_ttf/2.20.1") #self.requires("sdl_mixer/2.0.4") self.requires("libpng/1.6.40", override=True) self.requires("sdl/2.26.5", override=True)
我使用以下命令安装依赖:
conan install . --output-folder=build --build=missing --profile=Debug
该命令原本可以成功执行,但取消注释添加SDL_mixer的行后,出现如下错误:
ERROR: Package 'sdl_mixer/2.0.4' not resolved: sdl_mixer/2.0.4: Cannot load recipe. Error loading conanfile at 'C:\Users\username\.conan2\p\sdl_m16f68a6f39148\e\conanfile.py': Unable to load conanfile in C:\Users\username\.conan2\p\sdl_m16f68a6f39148\e\conanfile.py File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "C:\Users\username\.conan2\p\sdl_m16f68a6f39148\e\conanfile.py", line 1, in <module> from conans import CMake, tools ImportError: cannot import name 'CMake'
我已通过pip安装了Python版CMake:
C:\Users\username>python -m pip install CMake Requirement already satisfied: CMake in c:\python311\lib\site-packages (3.27.0)
并且尝试将conanfile.py的第一行改为from conan import ConanFile, CMake,仍会出现相同的ImportError: cannot import name 'CMake'错误。
解决方案
问题本质:你使用的是Conan 2.x,但
sdl_mixer/2.0.4的配方是为Conan 1.x编写的,它依赖旧的conans模块导入路径,而Conan 2.x已重构了模块结构,旧配方无法兼容。具体修复步骤:
- 升级SDL_mixer版本:更换为支持Conan 2.x的
sdl_mixer版本,比如sdl_mixer/2.6.0,修改conanfile.py中的依赖行:self.requires("sdl_mixer/2.6.0") - 清理旧缓存:删除Conan缓存中残留的旧
sdl_mixer配方,避免干扰:conan remove sdl_mixer/2.0.4 -f - 重新执行安装:再次运行原安装命令即可:
conan install . --output-folder=build --build=missing --profile=Debug
- 升级SDL_mixer版本:更换为支持Conan 2.x的
补充说明:
- 你通过pip安装的Python版CMake,和Conan配方中用到的
CMake工具类不是同一概念。Conan的CMake是用于构建流程的类,属于Conan框架的一部分,和系统/pip安装的CMake程序无关。 - Conan 2.x中,若你自己的配方需要使用CMake,应从
conan.tools.cmake导入,而非conan模块:from conan import ConanFile from conan.tools.cmake import CMake
- 你通过pip安装的Python版CMake,和Conan配方中用到的
内容的提问来源于stack exchange,提问作者SavedowW
相关产品推荐
相关产品推荐

