我如何诊断ImportError:在virtualenv中加载本机Windows python模块时,DLL加载失败?

我正在使用Python 3.x和virtualenv-不是conda,只是普通的virtualenv.
我激活venv并运行pip install opencv-python.然而,
导入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?

解决方法:

解决“找不到模块”错误时

尝试在要加载的模块上使用Microsoft的Dependency Walker或lucasg的Dependencies.确保从您的virtualenv的命令提示符下运行Dependencies.exe,以便它可以选择修改后的PATH.

导入行来自.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\"
上一篇:c-为什么`pyvenv`不安装`python-config`?


下一篇:【redis】-- springboot集成redis及使用