我已经安装了某个 python 包 (netCDF4),其中包含编译代码(扩展模块)。我在 Windows 10 (x64) 下运行 Anaconda 和 python 3.6。从控制台导入模块时,出现以下错误:

In [1]: import netCDF4
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-1-9588a3d4fb24> in <module>()
----> 1 import netCDF4

C:\Program Files\Anaconda3\lib\site-packages\netCDF4\__init__.py in <module>()
      1 # init for netCDF4. package
      2 # Docstring comes from extension module _netCDF4.
----> 3 from ._netCDF4 import *
      4 # Need explicit imports for names beginning with underscores
      5 from ._netCDF4 import __doc__, __pdoc__

ImportError: DLL load failed: Access is denied.

但是该模块是从管理员帐户完美加载的。

我怀疑某些关键的 DLL 文件被公司范围的安全策略阻止,这是相当严格的。例如,除非在“程序文件”文件夹中,否则默认情况下会阻止二进制文件。但是我的 python 发行版和 netCDF4 包已经在这个文件夹中,所以我不知道如何解释这一点。 Windows 事件查看器中的 AppLocker 日志未显示任何阻止事件。 depencency walker 工具列出的依赖项要么是系统库,要么包含在“程序文件”文件夹中。

如何开始故障排除?我怎样才能知道发生了什么?

最佳答案

经过长时间的斗争,我现在有了解决方案。

我在管理模式下启动 python,并使用工具 Process Explorer 记录加载了哪些 DLL 文件。 import netCDF4 语句加载了大约 10 个额外的 DLL 文件。然后我在用户模式下启动 python,并使用 ctypes.WinDLL 手动加载每个库。然后我能够查明导致问题的确切库( hdf5.dll )。原来是hdf5.dll权限不全,只能以管理员权限加载。

虽然我的问题很具体,但我希望我的解决方案可以在相关情况下帮助其他人......

关于python - 如何解决python导入错误-DLL访问被拒绝,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49127425/

10-12 16:55
查看更多