首页 > 解决方案 > 在 python 3.7 中导入 win32api 导致 dll 导入错误

问题描述

运行 jupyter notebook 时出现错误。错误复制:

python --version
Python 3.7.9
python
import win32api

错误是:ImportError: DLL load failed 在做了一些stackoverflow之后,我知道有2个dll文件丢失了:pythoncom37.dllpywintypes37.dll

我还知道我可以pywin32_postinstall.py在 Scripts 文件夹中运行这个 post 命令。我运行了这个脚本。重新启动了我的电脑。我手动下载了这两个dll并将其复制到我的system32。手动下载后,我开始出现不同类型的错误:ImportError: DLL load failed: %1 is not a valid Win32 application

我使用 anaconda 并运行我的 jupyter 笔记本,这是我的主要目标,但你能告诉我出了什么问题吗?

标签: python-3.xwinapijupyter-notebookdllimport

解决方案


我最近遇到了这个问题,但是使用了不同版本的 DLL。为我解决的问题是使用不同版本的 pywin32。我的解决方案(conda env,python 3.8.5):

pip install pywin32==300

或尝试 225、227、228。最新的 pywin32(截至本文为 301)似乎存在 dll 搜索问题(如果您使用的任何版本也存在 dll 搜索问题,我不会感到惊讶)。301 是在您的问题开始后发布的,但您可能仍然有类似的问题。

目前有一个关于 pywin32 DLL 加载失败的问题:https ://github.com/mhammond/pywin32/issues/1709

涉及的因素(根据我的经验)包括您的 PATH 变量(如果您使用的是 conda)。我自己没有测试过,但我很想知道这个问题是否在没有 conda 的情况下发生。如果找到的第一个 dll 是 301 的,这个问题就不会发生了。就我而言,这意味着将它们放在我的 C:\Windows\System32 文件夹中(是的,我在 Windows 上;快乐)。

因此,一个可能的解决方案#2 是运行 pywin32 安装后脚本,该脚本应该位于您的 venv/Scripts/pywin32_postinstall.py 下

要尝试该解决方案,请打开 ADMIN 命令提示符(非常重要,它是管理员),导航到您的 venv,然后运行:

ppython.exe Scripts\pywin32_postinstall.py --install

你不应该这样做,但如果你只需要一个一次性的解决方案并且它有效,那就太好了!


推荐阅读