我已经安装了某个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日志不显示任何阻止活动。依赖步行器工具列出的依赖项是系统库,或包含在“程序文件”文件夹中。
如何开始故障排除?我怎么知道发生了什么事?
经过长期的努力,我现在有了解决方案。
我以管理员模式启动python,并使用了Process Explorer工具来记录加载了哪些DLL文件。该import netCDF4
语句加载了大约10个额外的DLL文件。然后,我在用户模式下启动python,并用于ctypes.WinDLL
手动加载每个库。然后,我可以查明hdf5.dll
导致问题的确切库()。原来,它hdf5.dll
具有不完整的权限,因此只能使用管理员特权来加载。
尽管我的问题非常具体,但我希望我的解决方案可以在相关情况下为他人提供帮助...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句