如何在requirements.txt一键安装时先安装PyTorch以支持setup.py导入?
解决方案
方案一:修改setup.py,延迟导入并指定构建依赖
将torch加入构建依赖列表,同时把torch的导入逻辑延迟到setup函数执行阶段,避免脚本启动时就触发导入报错。修改后的setup.py代码如下:
from setuptools import setup def main(): # 延迟导入torch,确保构建依赖先被安装 import torch ext_modules = [] if torch.cuda.is_available(): from torch.utils.cpp_extension import BuildExtension, CUDAExtension ext_modules.append( CUDAExtension('iou3d_cuda', [ 'src/iou3d.cpp', 'src/iou3d_kernel.cu', ], extra_compile_args={'cxx': ['-g'], 'nvcc': ['-O2']}) ) setup( name='iou3d', ext_modules=ext_modules, cmdclass={'build_ext': BuildExtension} if ext_modules else {}, setup_requires=['torch'] ) if __name__ == '__main__': main()
pip会优先安装setup_requires中声明的torch,再执行后续的构建逻辑,解决了依赖顺序问题。
方案二:用pyproject.toml定义构建依赖(推荐)
遵循PEP 518标准,在项目根目录创建pyproject.toml文件,提前声明构建所需的依赖,pip会在处理setup.py之前自动安装这些依赖:
[build-system] requires = ["setuptools", "torch>=1.10.0"] # 可根据需求指定torch版本 build-backend = "setuptools.build_meta"
添加该文件后,原setup.py无需修改,pip会先安装torch,再执行setup.py中的导入和构建流程。
方案三:调整requirements.txt的安装顺序
如果仅在本地开发场景使用,可以调整requirements.txt的内容,先安装torch再安装当前项目:
torch>=1.10.0 ./ # 替换为你的iou3d项目本地路径或Git仓库地址
pip会按顺序安装依赖,确保torch先被安装完成,再执行项目的构建。
内容的提问来源于stack exchange,提问作者hanisalah
相关产品推荐
相关产品推荐

