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

标签 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 文件被公司范围的安全策略阻止了,这是非常严格的。例如,除非在“程序文件”文件夹中,否则默认情况下会阻止二进制文件。但是我的 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/

相关文章:

Python:嵌套的 'for' 循环

python - 如何按照Unix Shell或任何其他配置文件中提到的位置添加空值

windows - 通过批处理脚本(Windows 命令行)执行参数化的 .exe 文件

Python 2.x 与 3.x 导入,具体取决于调用/导入脚本的位置

Python 2 与 Python 3 导入

python - 您可以从 Windows 符号链接(symbolic link)导入 Python 模块吗?

python - 如何更改matplotlib AxesSubplot的颜色?

python - from_formula() 缺少 2 个必需的位置参数 : 'formula' and 'data'

java - 检查默认java安装版本是否大于1.x的DOS脚本

java - Play Framework 找不到javac