一、解决方法
detectron2是meta的2D人体姿态估计项目,Poseformer、MHformer等都需要该项目推断2D关键点。然而该项目的安装非常坑爹,报错五花八门,本文针对安装detectron2出现 No module named 'torch' ,但环境里实际存在pytorch,这种报错给出一个解决方法。
1.首先确定你确实装了pytorch,conda环境或者pip里查看能有pytorch、torchvision。torchvision官方的install.md文档里说也是需要的。
2.安装detectron2,注意!!!安装时额外加上 “--config-settings editable_mode=compat” 和 “--no-build-isolation” 这2串命令,比如
用git安装
git clone https://github.com/facebookresearch/detectron2.git
python -m pip install -e detectron2 --config-settings editable_mode=compat --no-build-isolation
或者你下载detectron2到本地了,那就是这样安装
python -m pip install -e "D:\test\detectron2" --config-settings editable_mode=compat --no-build-isolation
上面"D:\test\detectron2"换成你自己的目录
然后安装没有任何报错,就说明安装完成了。
3.安装完检查一下,有就说明成功了
二、原理解释
1. --config-settings editable_mode=compat
这串参数其实是 pip 在安装本地源码包(特别是像 Detectron2 这种大型源码项目)时非常关键的“控制选项”。
它们直接影响 pip 是怎么构建、隔离和安装你的项目的。这个参数是 PEP 660(新版可编辑安装标准) 引入的配置项。
它告诉 pip:“用兼容旧版 setup.py 的方式安装可编辑包”。
pip ≥ 23 之后默认采用 PEP 660 新机制;
旧项目(比如 Detectron2)仍然使用传统的 setup.py develop;
如果不加这个参数,pip 会用新的构建协议,而 setup.py 不兼容,出现报错;
error: subprocess-exited-with-error
加上--config-settings editable_mode=compat参数,等价于告诉 pip:
“别用新的方式安装可编辑包,用老版本的兼容模式(setup.py develop)。”
2. --no-build-isolation
默认情况下,pip 在安装一个源码包时,会:
· 临时创建一个“构建环境”(隔离的临时虚拟环境);
· 在里面安装 pyproject.toml 里声明的构建依赖;
· 在这个独立环境里运行 setup.py;
· 最后把结果安装回当前环境。
这样做是为了 隔离依赖冲突。 Detectron2 的 setup.py 会 import torch。但在临时构建环境中,没有 torch(pip 不会带上你的原始环境依赖)。所以会报:
ModuleNotFoundError: No module named 'torch'
加上 --no-build-isolation,告诉 pip:
“不要创建临时构建环境,直接用我当前 Anaconda 环境里的依赖(包括 torch、CUDA)。”
这样 setup.py 才能找到 torch、fvcore、yaml 等依赖包。
3. 总结
综合来看,这三个选项协同工作:
|
参数 |
含义 |
为什么需要 |
|
|
可编辑安装(开发模式) |
方便调试源码 |
|
|
使用旧版 setup.py 可编辑安装兼容模式 |
Detectron2 不支持 PEP 660 |
|
|
不创建临时构建环境 |
让 setup.py 能访问已安装的 torch 等依赖 |
完整流程图(这条命令在做什么)
python -m pip install -e . --config-settings editable_mode=compat --no-build-isolation
│ ├─► 进入当前目录(detectron2) ├─► 读取 setup.py(旧格式项目) │ ├─► 在当前环境构建,而非隔离虚拟环境 (--no-build-isolation) │ ├─► 使用旧的 develop 模式安装 (--config-settings editable_mode=compat) │ └─► 写入 detectron2.egg-link 到 site-packages
1038

被折叠的 条评论
为什么被折叠?



