Потребовалось некоторое время, чтобы найти проблему. Любые недостающие библиотеки DLL легко обнаружить с помощью Process Monitor . Однако в этом случае были найдены все зависимые библиотеки DLL, но в одной из них не было функции, используемой файлом .pyd (или связанными библиотеками DLL), которые я пытался импортировать.
Мне удалось сузить тест до 2 команд, которые вызвали ошибку - загрузить PYD напрямую.
python -c "import _mapscript"
ipython -c "import _mapscript"
Я попытался удалить / изменить PATH в и из виртуальных сред, и py2 и py3, и все выдало одну и ту же ошибку.
Затем я попытался запустить Process Monitor и сравнить результаты - ничего, кроме ipython, не загружает множество дополнительных библиотек Python для интерактивной оболочки.
Process Monitor включает удобную опцию Properties для каждого события, которая также показывает, какие модули загружены для Process. Их можно отсортировать, а затем скопировать в буфер обмена.
Мне удалось сравнить выходные данные работающего Python и поврежденных процессов IPython. IPython включает несколько дополнительных файлов .pyd из корневой установки Python (C:\Python36\DLLs
). Я знал, что pyd, который я пытался загрузить, использовал sqlite, и это был один из загруженных модулей (предположительно, поскольку IPython хранит все входные команды в базе данных sqlite для легкого доступа к истории). Временное удаление файла _sqlite3.pyd позволило загрузить модуль.
Папка Python DLLs имеет приоритет над папками в PATH, поэтому текущим исправлением было заменить sqlite3.dll в папке Python DLL на тот, который использовался MapServer, и все работало правильно.