根据前辈经验(https://blog.csdn.net/Sovereign00/article/details/146522390)
安装diff-gaussian-rasterization一定要有nvcc,即nvcc -V这个指令要有输出

1.报错情况

 ModuleNotFoundError: No module named 'torch'

这个错误是因为在构建 simple-knn包时缺少 PyTorch 依赖。
在我自己安装实,可以确认安装了torch,并经过核对,版本也没有问题,以前安装也没出这个问题,非常费解,经过查阅后发现pip在编译时会有一个隔离机制,才恍然大悟。

2.更正方式

原文

pip install ./diff-gaussian-rasterization-main

更正为

pip install ./diff-gaussian-rasterization-main --no-build-isolation

其核心在于使用了 --no-build-isolation​ 这个 pip 安装参数。这个修改之所以能解决 ModuleNotFoundError: No module named 'torch’的错误,是因为它改变了 pip 构建软件包的方式。

3.原因分析

3.1 默认的构建隔离机制

默认情况下,pip install在构建一个需要编译的 Python 包(如 diff-gaussian-rasterization,它包含 CUDA/C++ 扩展)时,会启用 “构建隔离”​ 模式。

  • 工作方式:pip 会创建一个临时的、干净的虚拟环境来执行构建过程。在这个临时环境中,pip 会仅根据项目声明的依赖列表,自动下载并安装构建所需的最小依赖集。

  • 目的:这确保了构建过程的纯净和可复现性,避免您本地环境中已安装但未在项目配置中声明的“杂散”依赖干扰构建。

3.2 问题所在:构建环境 vs. 运行环境

对于 diff-gaussian-rasterization这类深度学习的底层扩展库,问题恰恰出在这个“纯净”的环境上:

  • PyTorch 是必需但特殊的依赖:构建这个库需要 PyTorch 的头文件(*.h)和库文件来编译 C++/CUDA 代码。然而,PyTorch 本身是一个庞大、复杂且版本敏感的框架。

  • 声明不匹配:项目可能在 pyproject.toml或 setup.py中简单地将 torch声明为依赖,但 pip 在隔离环境中安装的可能是最新版的 PyTorch,或者是一个缺少 CUDA 支持的版本。

  • 与本地环境不兼容:您本地开发环境中已经安装了特定版本、特定配置(如针对特定 CUDA 版本编译)的 PyTorch。临时构建环境中的 PyTorch 版本很可能与您本地环境中的版本不一致,导致:

    • 头文件不匹配:编译时找不到正确的函数签名或数据结构。

    • ABI 不兼容:即使编译通过,编译出的二进制扩展库也可能无法与您本地环境中实际运行的 PyTorch 库正确链接,导致运行时崩溃。

结果是:构建过程要么因为找不到正确的 torch模块而失败(如您所见),要么即使构建成功,后续使用时也可能出现难以排查的错误。

3.3 --no-build-isolation的作用

添加 --no-build-isolation参数,就是禁用上述的构建隔离机制。

  • 工作方式:pip 会直接在您当前的 Python 环境中进行构建。构建过程会直接看到并使用您环境中已经安装好的所有包,包括精心配置好的那个特定版本的 PyTorch。
  • 为什么能成功:
    • 编译器能找到正确的头文件:因为直接使用了您本地环境的 site-packages/torch/include。
    • 链接器能找到正确的库:因为直接链接了您本地环境的 libtorch.so或 torch.lib。
    • 确保版本一致:编译所依赖的 PyTorch 版本,与运行时使用的版本完全一致,从根本上避免了兼容性问题。

简单来说,–no-build-isolation让构建过程“看到”并使用已经安装好的、正确配置的 PyTorch,而不是尝试在临时环境中安装一个新的、可能不匹配的版本。​ 这是解决此类与 PyTorch、CUDA 等紧密绑定的 C++ 扩展库安装问题的常用且有效的方法。

温馨提示:在使用此方法前,请确保您的本地 PyTorch 环境已经是正确且完好安装的。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐