Обновление 0 :
[PyPI]: pywin32 227 (который решает эту проблему), опубликовано в 20191114!
Оповещение о спойлере !!!
Применено # 2.2. (снизу) к исходным .whl s и опубликовал их в [GitHub]: CristiFati / Prebuilt-Binaries - (master) Prebuilt-Binaries / PyWin32 / v225 ( win_amd64 , win32 для Python 3.8 ).
После установки (одного из них) существующий код должен работать OOTB (относительно этой проблемы).
О проблеме сообщили на [GitHub]: mhammond / pywin32 - python 3.8 .
Приведенный выше URL ссылается еще на 2:
- [Python 3.8.Docs]: что нового в Python 3.8 - Изменения в Python API , который гласит ( упор - мой):
- Зависимости DLL для модулей расширения и библиотеки DLL, загруженные ctypes в Windows, теперь разрешаются более безопасно. Только системные пути, каталог, содержащий файл DLL или PYD, и каталоги, добавленные с помощью add_dll_directory () , ищутся для зависимостей времени загрузки. В частности, PATH и текущий рабочий каталог больше не используются, и их модификации больше не будут влиять на нормальное разрешение DLL.
- [Python 3.Docs]: os. add_dll_directory ( path ) , в котором говорится ( выделение все еще мое):
Этот путь поиска используется при разрешении зависимостей для импортированных модулей расширения (сам модуль разрешается с помощью sys.path
), а также ctypes .
В то же время я немного покопался и обнаружил, что (для win32api.pyd ) это pywintypes38.dll (что является зависимостью для .pyd s), который не найден (я также указал это в комментарии к проблеме).
Решения (на самом деле обходные пути (более или менее) довыпущено официальное и обратно совместимое исправление):
Force pywintypes38.dll load byимпортировать его (так как это также модуль Python и в этом сценарии он не подпадает под указанное выше правило) до любого PyWin32 модуля:
import pywintypes
import win32api
При работе с COM вам понадобится import pythoncom
Добавление pywin32_system32 в .dll путей поиска (по новой модели сверху). Есть несколько способов:
- v-python комментарий к проблеме URL , который предоставляет небольшой фрагмент (я не проверял его)
Я также отправил [GitHub]: mhammond / pywin32 - Поддержка Python 3.8 , где я делаю все в pywin32.pth file («выполняется» при запуске интерпретатора, поэтому никаких изменений для существующего кода не требуется). К сожалению, существует проблема с автоматизированными тестами AppVeyor , которые не проходят (но по некоторым другим причинам), поэтому он застрял там на некоторое время. Обратите внимание, что в то же время, PR был закрыт, и был применен другой (аналогичный) подход. Обратите внимание, что v226 (выпущенный 20191110 ), содержащий исправление, не работает на VirtualEnv ( [SO]: PyWin32 (226) и виртуальные среды (ответ @ CristiFati) ).
В любом случае, применяя изменения локально (1) (на обоих моих Python VirtualEnv s), решил проблему (с одной и не сломал другую):
[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q058631512]> sopr.bat
*** Set shorter prompt to better fit when pasted in StackOverflow (or other) pages ***
[prompt]> "e:\Work\Dev\VEnvs\py_064_03.07.03_test0\Scripts\python.exe" -c "import win32api"
[prompt]> "e:\Work\Dev\VEnvs\py_064_03.08.00_test0\Scripts\python.exe" -c "import win32api"
[prompt]>
Другие способы, такие как копирование .dll s (например, % SystemRoot% \ System32 ) или символическая ссылка , но (лично) я бы не рекомендовал эти
Примечание # 1
Проверка [SO]: запуск / отладка UnitTests приложения Djangoщелкнуть правой кнопкой мыши контекстное меню в PyCharm Community Edition? (@ Ответ CristiFati) ( Patching utrunner section) о том, как применять патчи (на Win ).