记一次骚调试/OSError [WinError 126] 找不到指定的模块

背景

基于s2cnn的开源项目跟进一个研究有一段时间了,第一次移植到win平台上,遇到各种问题,终于将所有包全部装好后,遇到一个错误:

image-20210624024415110

解决

细看这个错误,发现是一个底层的问题。硬着头皮开始调试

image-20210624024543662

首先在最后定位到最后报错的语句,这里是python自带的ctypes包,但能够发现一些线索

image-20210624024850195

发现 self._name

image-20210624024800356

原来是在调用一个动态链接库,用的是nvrtc,查了一下是CUDA的一个动态链接库,其文档在NVRTC (Runtime Compilation) :: CUDA Toolkit Documentation (nvidia.com)

后面92很容易猜到是CUDA版本号,但是本机的CUDA版本:

image-20210624025143198

基本可以断定是CUDA版本不对应的问题,那么只需要将这个加载的文件名改一下就好。那么:

  • 这个文件是什么?
  • 在哪里改?

对于第一个问题,看NVRTC文档,可知

image-20210624025344747

找到CUDA文件夹位置

image-20210624025424444

image-20210624025521558

拷贝文件名

对于第二个问题,通过仔细分析程序,发现定义在了pynvrtc 这个python库中,这个python库的功能就是为C++写的程序提供上层接口。对这个动态链接库的命名就定义在这里https://github.com/NVIDIA/pynvrtc/blob/fffa9f6f4a7ee1d452346cbdf68b84b5246ccffb/pynvrtc/interface.py#L96

image-20210624025756727

把它改成我的版本

image-20210624025837273

成功解决问题

结论

找到pynvrtc/interface第96行,把def_lib_name变量改成符合你的NVRTC名,这个名字在CUDA驱动bin文件夹内。

夜到了三点,但是调出一个BUG还是exciting呢!

一杯茶,一包烟,一行代码写一天。 - 范伟「一杯茶,一包烟」表情包_范伟表情

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 关于"python3.7.4 oserror: [winerror 126] 不到指定模块"错误,通常这个错误是由于Python程序在导入某个模块不到指定模块而引起的。在Windows操作系统中,它可能是由于以下几个原因之一导致的: 1. 模块没有正确安装:请确保指定模块已经正确安装并且可以被Python解释器到。可以使用pip命令安装模块,例如:`pip install 模块名`。 2. 环境变量配置错误:请检查环境变量是否配置正确。在Windows系统中,可以通过以下步骤检查环境变量配置: - 右键点击“我的计算机”,选择“属性”。 - 点击“高级系统设置”。 - 在弹出的对话框中,点击“环境变量”按钮。 - 确保系统变量“Path”中包含Python的安装目录以及Python的Scripts目录。 3. Python版本不匹配:请确保所使用的Python版本和模块的版本是匹配的。有些模块可能不兼容某些Python版本,需要使用兼容的版本或者更新Python版本。 4. 模块文件损坏或缺失:请检查模块文件是否存在,以及是否完整。如果文件损坏或缺失,可以尝试重新安装模块。 如果以上方法均无效,可以尝试在互联网上搜索相关错误信息,查解决方案或者参考其他开发者的经验。 ### 回答2: Python 3.7.4 的 OSError: [WinError 126] 不到指定模块通常是因为某些模块或库的依赖项未能被正确加载。这可能是由于以下几种原因导致的: 1. 模块或库未正确安装:请确保你已经正确安装了相应的模块或库。可以使用 pip 命令来安装所需的模块。 2. 环境变量问题:有时候,模块或库的路径未被正确添加到系统的环境变量中,因此 Python 在寻模块时无法到。你可以尝试在系统的环境变量中手动添加模块或库所在的路径。 3. 模块或库版本不兼容:有时候,模块或库的旧版本可能与 Python 版本或其他库不兼容。你可以尝试更新模块或库到最新的版本,或者选择与你当前 Python 版本兼容的版本。 解决这个问题的具体方法可能因为情况而有所不同。你可以尝试以下几个步骤来解决这个问题: 1. 确定你是否正确安装了相关的模块或库,如果没有,请使用 pip 命令来安装它们。 2. 检查系统的环境变量,确保模块或库所在的路径已被正确添加。 3. 尝试更新你使用的模块或库到最新的版本。 4. 如果问题仍然存在,你可以尝试重新安装 Python 或者重新安装相关的模块或库。 希望这些方法可以帮助你解决这个问题。如果问题仍然存在,请提供更多的详细信息,以便我们能够更好地帮助你解决这个问题。 ### 回答3: 这个错误通常出现在Python程序中尝试导入或使用一个不存在或不到模块时。Python解释器在执行导入操作时,会尝试在系统指定的路径中查相应的模块文件,如果没有到,就会抛出OSError异常,错误代码为winerror 126。 解决这个问题的方法有以下几种: 1. 确保要导入的模块已经正确安装:可以通过在命令行中运行“pip freeze”命令来查看已安装的模块列表,如果要导入的模块不在其中,可以使用“pip install”命令安装。 2. 检查模块名字的拼写:确保导入的模块名字没有拼写错误,Python是区分大小写的,所以要确保大小写匹配。 3. 检查模块路径:有时候程序在导入模块时可能会出现路径问题,可以尝试指定完整的模块路径进行导入。例如,如果要导入的模块位于自定义文件夹下的子文件夹中,可以使用"from custom_folder.sub_folder import module_name"语句导入该模块。 4. 确保模块可被到:在Windows系统中,可以在系统的环境变量中添加Python模块的路径,这样就可以确保Python解释器能够到要导入的模块。 总之,通过检查模块的安装、拼写、路径和环境变量等方面,可以解决这个错误。如仍然无法解决,建议尝试在Python社区或相应模块的官方论坛中搜索类似的问题,寻求更多的帮助和解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值