关于python:在virtualenv中使用Lowey的cv2的ImportError

ImportError for cv2 with lackey in a virtualenv

大图是

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

上下文/环境

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

在使用activate进入virtualenv,然后在C: virtualenvs virtualenvname Scripts 目录下输入pip install lackey命令之后,我也安装了bugey,没有任何列出的错误(安装有效)。

问题

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

控制台的stackTrace:
Traceback (most recent call last):
File"C:\Users\user1\workspace\sikulixframework0.1\testManager.py", line 4, in
from lackey import *
File"C:\virtualenvs\virtualenvname\lib\site-packages\lackey\__init__.py", line 31, in
from .RegionMatching import Pattern, Region, Match, Screen, ObserveEvent
File"C:\virtualenvs\virtualenvname\lib\site-packages\lackey
egionMatching.py", line 17, in

import cv2
File"C:\virtualenvs\virtualenvname\lib\site-packages\cv2\__init__.py", line 7, in
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 *),并且可以正常工作。就像在对stackoverflow问题"无法导入cv2;" DLL加载失败",我下载了Visual C ++ 2015可再发行组件包,但是我的复杂性没有改变。


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

如果您使用virtualenv并且发生ImportError(至少对于cv2),则为摘要

  • 确保由virtualenv(在创建命令的--python=部分之后)引用的可执行文件(至少包含python3.6.1中的python3.dll文件)的路径在Windows环境变量" PATH"中。
  • 将相同的python3.dll文件添加到virtualenv所在的 Scripts 目录中。
  • 矮人项目git owner(glitchassassin)的回答帮助我解决了这个问题。他还指出此问题是由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%.