如何解决python导入错误 - DLL访问被拒绝

时间:2018-03-06 09:28:51

标签: python windows python-import administrator applocker

我安装了一个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文件被公司范围的安全策略阻止,这是非常严格的。例如,默认情况下会阻止二进制文件,除非在&#34;程序文件中#34;夹。但是我的python发行版和netCDF4包已经在这个文件夹中,所以我不知道怎么解释这个。 Windows事件查看器中的AppLocker日志不会显示任何阻止活动。由dependncency walker工具列出的依赖项是系统库或包含在&#34;程序文件&#34;文件夹中。

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

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

这对我有用:

https://vxlabs.com/2017/12/06/how-to-debug-pyinstaller-dll-pyd-load-failed-issues-on-windows/

  

在Windows上调试DLL加载错误时,请使用lucasg的开源   以及对旧的Dependency Walker软件的更现代的重写。非常   重要的是,继续钻取间接依赖项,直到   您会找到丢失的DLL。

在此处下载:https://github.com/lucasg/Dependencies

也可以在没有管理员权限的情况下使用!

答案 2 :(得分:-1)

这对我有用:关闭防火墙。我正在使用360防火墙。我关掉电源后,一切都很好。 希望有帮助