如何配置CMake项目使用Conda安装的PyTorch C++ API
问题根因
报错来自两个配置错误:
- 你设置的
CMAKE_PREFIX_PATH层级错误:追加的路径写到了Torch子目录,会导致CMake搜索PyTorch依赖包时路径断层,找不到同目录下的其他依赖配置。 - conda默认安装的
libprotobuf仅包含运行时库,不带CMake导出的ProtobufConfig.cmake配置文件,PyTorch绑定的Caffe2构建脚本默认走CONFIG模式检索Protobuf,找不到就直接终止配置。
配置步骤(无需源码编译PyTorch)
- 先在对应conda环境中补全带CMake配置的依赖包
conda activate ML conda install -c conda-forge protobuf
安装完成后可以在$CONDA_PREFIX/lib/cmake/protobuf路径下找到对应的ProtobufConfig.cmake文件。
- 替换原有
CMakeLists.txt为如下配置,避免硬编码路径,同时修正搜索路径:
cmake_minimum_required(VERSION 3.19) project(PyTorch_Cpp_HelloWorld CXX) # 自动读取当前激活的conda环境路径,协作者无需修改配置 if(NOT DEFINED ENV{CONDA_PREFIX}) message(FATAL_ERROR "配置前请先激活安装了PyTorch的ML conda环境") endif() set(CONDA_ENV_ROOT $ENV{CONDA_PREFIX}) set(PYTORCH_ROOT "${CONDA_ENV_ROOT}/lib/python3.10/site-packages/torch") # 修正CMAKE_PREFIX_PATH层级,同时加入conda环境根目录让CMake能找到环境内安装的依赖 list(APPEND CMAKE_PREFIX_PATH "${PYTORCH_ROOT}/share/cmake" "${CONDA_ENV_ROOT}" ) find_package(Protobuf REQUIRED CONFIG) find_package(Torch REQUIRED CONFIG) # 示例:添加可执行文件与链接配置 add_executable(torch_demo main.cpp) target_link_libraries(torch_demo PRIVATE ${TORCH_LIBRARIES}) # PyTorch 2.x 及以上版本要求C++17及以上标准 set_target_properties(torch_demo PROPERTIES CXX_STANDARD 17)
- 执行项目配置时必须提前激活ML conda环境:
mkdir build && cd build conda activate ML cmake ..
注意事项
- 不要通过apt安装系统级的
libprotobuf-dev,其版本和conda环境中PyTorch依赖的Protobuf版本大概率不匹配,会出现ABI兼容问题导致运行时崩溃。 - 如果仍提示找不到Protobuf,执行cmake时追加参数
-DProtobuf_DIR=$CONDA_PREFIX/lib/cmake/protobuf即可强制指定配置路径。 - 不要把
CMAKE_PREFIX_PATH写到Torch子目录层级,写到share/cmake层级即可,CMake会自动检索该路径下所有包的配置文件。 - 协作者只需要在自己的conda环境中按相同方式安装PyTorch和protobuf,激活环境后即可直接编译,不需要修改CMake配置,也不需要源码编译PyTorch。
内容的提问来源于stack exchange,提问作者rbaleksandar
相关产品推荐
相关产品推荐

