【问题标题】:How do I diagnose ImportError: DLL load failed when loading native Windows python modules in a virtualenv?如何诊断 ImportError:在 virtualenv 中加载本机 Windows python 模块时 DLL 加载失败?
【发布时间】:2018-06-29 08:09:06
【问题描述】:

我使用的是 Python 3.x 和一个 virtualenv——不是 conda,只是一个普通的 virtualenv。 我激活了 venv 并运行 pip install opencv-python。然而, import cv2 给我一个 DLL not found 错误:

(tf) C:\>python
Python 3.6.2 (v3.6.2:5fd33b5, Jul  8 2017, 04:57:36) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "c:\src\venv\tf\lib\site-packages\cv2\__init__.py", line 4, in <module>
    from .cv2 import *
ImportError: DLL load failed: The specified module could not be found.
>>>

这是一个 virtualenv 错误吗?如何确定缺少哪个模块/dll?

【问题讨论】:

  • 我在创建此问题之前阅读了该问题,但它不适用; conda 不涉及,并且对该问题的公认答案是不正确的。另外:这个问题还询问如何诊断一般根本问题。

标签: python virtualenv


【解决方案1】:

关于解决“找不到模块”的一般错误

尝试在正在加载的模块上使用 Microsoft 的 Dependency Walker 或 lucasg 的 Dependencies。请务必从您的 virtualenv 的命令提示符运行 Dependencies.exe,以便它选择您修改后的 PATH。

导入行是from .cv2 import *,因此要加载的模块与__init__.py(这是前导.)位于同一目录中,并命名为cv2-SOMETHING.pyd(这是本机Python模块的样子)。将该文件加载到 Dependencies.exe 中,它会显示 Windows 想要但找不到的 DLL。

在这种情况下,DLL 是 Python3.dll。为什么它不见了?因为a virtualenv bug 已修复,但尚未发布 - 一年多没有发布。

特别是关于解决这个问题

github 问题提出了一个修复方法:使用 venv。

或者,您可以手动将丢失的python3.dll 复制到您的 virtualenv 中。您必须为您创建的每个 virtualenv 执行此操作。

copy "c:\Program Files\Python36\python3.dll" "c:\src\venv\tf\Scripts\"

【讨论】:

  • 非常有用。我使用 Dependencies 发现我的系统错过了 VCOMP140.DLL
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-09
  • 1970-01-01
  • 1970-01-01
  • 2020-03-31
  • 2021-07-25
  • 2021-04-17
相关资源
最近更新 更多