Как устранить ошибку импорта Python - доступ к DLL запрещен

Я установил определенный пакет Python (netCDF4), который содержит скомпилированный код (модуль расширения). Я использую Anaconda и python 3.6 под Windows 10 (x64). При импорте модуля из консоли я получаю следующую ошибку:

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 уже находятся в этой папке, поэтому я не знаю, как это объяснить. Журнал AppLocker в средстве просмотра событий Windows не показывает каких-либо блокирующих действий. Зависимости, перечисленные средством обхода зависимостей, являются либо системными библиотеками, либо содержатся в папке "программные файлы".

Как начать устранение неполадок? Как я могу узнать, что происходит?

2 ответа

Это сработало для меня:

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

При отладке ошибок загрузки DLL в Windows используйте открытый исходный код lucasg и более современное переписывание старого программного обеспечения Dependency Walker. Очень важно продолжать углубляться в косвенные зависимости, пока не найдете недостающие библиотеки DLL.

Скачать здесь: https://github.com/lucasg/Dependencies

Может использоваться также без прав администратора!

После долгой борьбы у меня теперь есть решение.

Я запустил python в режиме администратора и использовал инструмент Process Explorer, чтобы регистрировать, какие DLL-файлы были загружены. import netCDF4 оператор загрузил около 10 дополнительных файлов DLL. Затем я запустил python в пользовательском режиме и использовал ctypes.WinDLL загрузить каждую из этих библиотек вручную. Затем я смог точно определить библиотеку (hdf5.dll) это вызвало проблемы. Оказалось, что hdf5.dll имел неполные разрешения, так что он мог быть загружен только с правами администратора.

Хотя моя проблема была очень специфической, я надеюсь, что мое решение может помочь другим в связанных ситуациях...

У меня это сработало: выключите брандмауэр. Я использовал 360 Firewall. После того, как я его выключил, все стало хорошо и шикарно. надеюсь, что это поможет

Другие вопросы по тегам