Как устранить ошибку импорта 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. После того, как я его выключил, все стало хорошо и шикарно. надеюсь, что это поможет