Q100716:如何在 Windows 系统上启动 Nuke 时解决“导入 _ctypes 时 DLL 加载失败”错误

症状

一些用户在 Windows 机器上尝试启动Nuke时,会遇到程序持续崩溃的情况,并且在命令提示符中会出现类似以下内容的错误消息:

ImportError: DLL load failed while importing _ctypes: The specified module could not be found.

本文将介绍防止此错误发生的步骤,并阐述其发生的原因。

原因

我们目前已知以下程序会导致DLL load failed while importing _ctypes ”错误,从而阻止Nuke 16 启动。但请注意,此列表并不完整,其他应用程序也可能导致此问题:

这个问题是由于添加到 Windows 注册表中的额外“应用程序路径”与Nuke使用的 Python 版本冲突造成的。虽然目前仅在启动Nuke 16 时报告过此问题,但同样的问题也可能影响其他版本的Nuke

当安装使用 Python 的第三方应用程序时,它可能会通过 Windows 注册表将自身的目录添加到 Python 模块搜索路径 ( sys.path ) 中。如果该应用程序使用的 Python 版本与Nuke使用的版本相同,这些额外的“应用程序路径”可能会阻止Nuke访问和导入其运行所需的 Python 模块。

例如, Spyder 6使用的是 Python 3.11,而Nuke 16 也使用了相同的 Python 版本。由于Spyder 6会创建指向其“应用程序路径”的注册表项,因此当Nuke启动时,它会在这些位置搜索特定的模块,如果找不到,则无法打开。

有关 Windows 注册表项和 Python 的更多详细信息,请参阅延伸阅读部分。

解决

解决此问题的可用选项取决于导致问题的程序。因此,第一步是确认具体是哪个程序与Nuke的 Python 版本冲突。

为此,请按照以下步骤启动Nuke 16 的 Python 可执行文件并打印当前模块搜索路径:

  1. 打开命令提示符窗口并运行以下命令:
"C:\Program Files\Nuke16.0v1\python.exe"
  1. 运行以下两行代码,按两次回车键以完全执行代码:
import sys
for p in sys.path: print(p)
  1. 此时您应该可以看到Nuke使用的搜索路径已打印出来:

为了进行比较,以下是安装Spyder 6后的相同输出结果:

注意:这些高亮显示的路径不应手动删除或编辑,而应使用以下选项之一来解决该问题。

确定负责的程序后,请选择以下最符合您需求的解决方案之一:

A) 卸载应用程序

如果您安装了有问题的应用程序但不再需要它,只需卸载该程序, Nuke即可成功启动。

B) 卸载该应用程序并升级到更新的版本

如果您仍然需要使用该程序,删除现有版本并更新到与Nuke的 Python 不冲突的较新版本可能会解决问题。

例如,最新发布的Anaconda3版本使用 Python 3.12,安装它不会影响Nuke 16 的启动能力。

C) 重新安装应用程序,但不定义其“应用程序路径”。

如果您仍然需要在不升级其版本的情况下使用该程序,一些应用程序(如Anaconda3MiniConda3)在安装过程中提供了一个选项,可以禁用阻止Nuke启动的“应用程序路径”。

对于 Anaconda3 和 MiniConda3,此选项称为“将 {program} 注册为我的默认 Python 3.11 ”,应禁用此选项以使Nuke正确启动。

下面列出了重新安装 Anaconda 而不将其设置为 Python 3.11 默认 Python 库的基本步骤,但请注意,具体设置名称可能因应用程序而异,并非所有程序都提供此选项:

i)从您的计算机上卸载该应用程序。
ii)开始重新安装程序
iii)出现提示时,取消选中“将 {program} 注册为我的默认 Python 3.11 ”选项框:

D) 手动修改 Windows 注册表

如果您需要继续使用某个程序,但该程序没有阻止将“应用程序路径”添加到 Windows 注册表的选项,则可以调整注册表来删除这些路径。

警告:对 Windows 注册表进行任何不正确的更改都可能对您的计算机造成不利影响,因此务必谨慎操作Foundry并在编辑 Windows 注册表之前始终创建备份。Foundry 对您计算机上的任何更改概不负责,并且任何此类更改都可能导致其他应用程序无法正常运行。


如果您熟悉如何通过 Windows 注册表更改计算机设置,并希望继续操作,请以管理员身份执行以下操作:

i)打开注册表编辑器,并导航至: Computer\HKEY_CURRENT_USER\Software\Python\PythonCore
ii)展开 3.11 子文件夹,并选择PythonPath文件夹:

iii)右键单击此文件夹,选择“重命名”选项,并将名称设置为“PythonPath_Disabled”(或类似名称):

iv)启动Nuke 16 时,应该不再出现 DLL 加载失败错误。如果仍然存在此问题,您可能还需要在Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore位置重复此过程。

延伸阅读

有关注册表项如何更改 Python sys.path的更多信息,请访问此处的 Python 文档:

https://docs.python.org/3/using/windows.html#finding-modules

如果在移除冲突的 Python “应用程序路径”后仍然遇到困难,请创建支持工单,告知我们遇到的确切问题以及已采取的故障排除步骤。

如需了解如何提交支持请求,请参阅本文:

Q100064:如何提交支持工单

    我们很遗憾听到

    请告诉我们