一、解决方式:(可先直接尝试第三步)
解决方式:pyg-team/pytorch_geometric: Graph Neural Network Library for PyTorch (github.com)
安装额外的包时需要注意版本:使用以下命令进行安装:
pip install pyg_lib torch_scatter torch_sparse torch_cluster torch_spline_conv -f https://data.pyg.org/whl/torch-2.3.0+${CUDA}.html 其中torch-2.3.0需要替换成自己的torch版本号,${CUDA}替换为自己的cuda版本号。
比如我的torch是2.3.0,cuda是12.1版本:
pip install pyg_lib torch_scatter torch_sparse torch_cluster torch_spline_conv -f https://data.pyg.org/whl/torch-2.3.0+cu121.html
二、产生这个错误的原因:
经过查看报错信息的“OSError: [WinError 127] 找不到指定的程序。 Error loading "F:\anaconda\envs\env_3D_scene\lib\site-packages\torch\lib\c10_cuda.dll" or one of its dependencies.”发现沿着这个路径能够找到这个dll文件,所以是找不到相关的依赖产生的问题。
经过以下的操作我也验证了以上猜测:
①我经过debug调试报错的文件,发现打开文件返回值是none,并且错误代码返回的是127。我就执行了②的代码,看看这个文件是不是找不到。
②经过运行下面的代码,发现显示的是能够成功加载这个文件。
import ctypes
import os
dll_path = r"F:\anaconda\envs\env_3D_scene\lib\site-packages\torch\lib\c10_cuda.dll"
if os.path.exists(dll_path):
try:
ctypes.WinDLL(dll_path)
print("DLL loaded successfully.")
except OSError as e:
print(f"Error loading DLL: {e}")
else:
print("DLL file does not exist.")
③我又使用depends,查找是不是缺乏依赖项。报了下面了依赖性缺失:
我一开始认为是直接使用conda create -n 老环境 --clone 新环境 这个命令复制的虚拟环境,导致torch的目标环境缺少这些相关依赖项。经过排查,发现是下载pytorch_geometric过程产生的问题,我只是单纯在anaconda.org复制了pytorch_geometric的下载命令,但是经过我在虚拟环境中重装torch,还是会报这个错误。所以就想到了是不是pytorch_geometric安装的问题,就找到了上面的pytorch_geometric官方实现。
三、如果还不行,就重新装Pytorch。但是由于我使用的是conda create -n 老环境 --clone 新环境这个命令复制的有虚拟环境,经过测试后,装了torch老的虚拟环境的解释器不会报错,所以我就把老的虚拟环境里的torch复制到了新的虚拟环境中的指定文件夹下,我的新的虚拟环境路径是“F:\anaconda\envs\env_3D_scene\lib\site-packages\”,就把老的torch文件夹中的torch文件夹复制到这个文件夹下,发现不会报这种错误。