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

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


person akvilas    schedule 06.03.2018    source источник


Ответы (3)


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

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

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

person akvilas    schedule 06.03.2018
comment
Я думаю, вы имеете в виду Process Monitor ( не Process Explorer - я не знаю, где он ведет журнал дескрипторов файлов). У меня была аналогичная ситуация, когда определенные модули не импортировались с ошибками отказа в доступе, а приложения Qt (например, spyder) не открывались. Оказалось, что QtCore5.dll и некоторые модули __config__.py не имеют разрешений на чтение / чтение + выполнение для обычных пользователей. - person chrstphrchvz; 02.06.2018

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

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

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

person Mayra Delgado    schedule 26.11.2018

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

person user13695600    schedule 06.06.2020
comment
Мне очень жаль, что я проголосовал против, но вопрос в том, как отлаживать, и вы не даете на это ответа. Кроме того, корпоративная политика безопасности (согласно вопросу) не может быть отключена. Кроме того, отключение брандмауэра - крайнее средство временного решения. - person akvilas; 16.06.2020
comment
1. Я понимаю, откуда вы, извините, если мой ответ вам не помог. - person user13695600; 17.06.2020