virtualenv 中带有走狗的 cv2 的 ImportError

ImportError for cv2 with lackey in a virtualenv

大图是

在 Windows 7 中,lackey 在 python3.6.1 virtualenv 中安装了 pip,该 virtualenv 使用 python2.7.2 解释器从 virtualenv15 的解压 .tar.gz 创建。 1.0 无法导入 cv2 模块.

上下文/环境

在 Windows 7 (x64) 和 C:\Users\user1>C:\Python27\python.exe C:\VirtualenvTools\virtualenv-15.1.0\virtualenv.py --python=C:\VirtualenvTools\Python36\Python.exe C:\virtualenvs\virtualenv 中(全部一行)我创建了一个 virtualenv 并设置了它的 C: \virtualenvs\virtualenvname\Scripts\Python.exe 文件作为 Eclipse 中 PyDev 项目的主要解释器。

我在使用 activate 进入 virtualenv 后安装了 lackey 然后 pip install lackey 命令 @ C:\virtualenvs\virtualenvname\Scripts\ 目录没有任何列出的错误(安装成功)。

问题

当我在我的 PyDev 项目中使用 from lackey import * 导入 lackey 时,Eclipse 的控制台中有一个 ImportError

控制台的堆栈跟踪:
Traceback (most recent call last):
File "C:\Users\user1\workspace\sikulixframework0.1\testManager.py", line 4, in <module>
from lackey import *
File "C:\virtualenvs\virtualenvname\lib\site-packages\lackey\__init__.py", line 31, in <module>
from .RegionMatching import Pattern, Region, Match, Screen, ObserveEvent
File "C:\virtualenvs\virtualenvname\lib\site-packages\lackey\RegionMatching.py", line 17, in <module>
import cv2
File "C:\virtualenvs\virtualenvname\lib\site-packages\cv2\__init__.py", line 7, in <module>
from . import cv2
ImportError: DLL load failed: Le module spécifié est introuvable.

(Le module spécifié est introuvable. = The specified module could not be found.)

当直接使用相同的解释器 (C:\virtualenvs\virtualenvname\Scripts\Python.exe) 时,如果我写 from lackey import * 我得到相同的 stackTrace

我的分辨率试过

我在虚拟环境外尝试了相同的操作 (from lackey import *),并且成功了。就像 , I downloaded the Visual C++ 2015 redistributable package 中的建议,但我的并发症没有任何改变。

我在Windows PATH环境变量中添加了从path\to\original\python36\python.exe到原来Python3.6.1的路径在包含 python3.dll 文件并添加相同 python3.dll 文件的 virtualenv 创建的 C:\Users\user1>C:\Python27\python.exe C:\VirtualenvTools\virtualenv.py --python=C:\VirtualenvTools\Python36\Python.exe C:\virtualenvs\virtualenv 命令中在 C:\virtualenvs\virtualenv\Scripts 目录中,它成功了!

如果您使用 virtualenv 并且发生 ImportError 时的总结(至少对于 cv2)

  1. 确保 virtualenv 引用的可执行文件路径(至少包含 python3.dll 文件 python3.6.1) (在创建命令的 --python= 部分之后)在 "PATH" Windows 环境变量中。
  2. 将相同的 python3.dll 文件添加到 virtualenv 所在的 \Scripts\ 目录。

走狗项目 git 所有者(glitchassassin)的 answer 帮助我解决了这个问题。他还指出这个问题是由 virtualenv 引起的:

Looks like this is actually also an issue in virtualenv.

关于virtualenv的问题,有人找到了同样的解决方法:

[N]o need to download DLL files from untrusted random Internet sites, just copy the one from c:/Python3.5/ (or wherever you installed Python 3.5) into any directory on your %PATH%.