可执行文件的cv加载

-1 投票
1 回答
578 浏览
提问于 2025-04-18 13:22

我在代码中导入了cv2库,并通过GUI2EXE软件使用py2exe制作了一个可执行文件。

py2exe创建了一个cv2.pyc文件,每次启动应用程序时都会运行这个文件,但在执行到mod = imp.load_dynamic(name,path)这一行时,出现了“导入错误:DLL加载失败。找不到指定的模块”的错误。它还创建了其他文件,比如numpy.core_sort,在运行时也会出现同样的错误。

我想问的是,为什么py2exe在运行应用程序时只运行cv2.pyc文件?它应该直接导入cv2库就可以了。下面是cv2.pyc文件中的代码:

def __load():
    import imp, os, sys
    try:
        dirname = os.path.dirname(__loader__.archive)
    except NameError:
        dirname = sys.prefix
    path = os.path.join(dirname, 'cv2.pyd')
    #print "py2exe extension module", __name__, "->", path
    mod = imp.load_dynamic(__name__, path)
##    mod.frozen = 1
__load()
del __load

我的代码是这样调用库的:

import wx
import wx.lib.buttons
import numpy as np
import os 
import cv2.cv as cv #Import functions from OpenCV
from numpy import *
from PIL import Image #python imaging library

1 个回答

0

在查看cv2.cpp文件时,发现里面有一行代码#include "numpy/ndarrayobject.h",这说明它加载了numpy库,这一点并不让人意外。因为py2exe看不到C++的源代码,所以它无法检测到这一点。因此,我认为“指定的模块”找不到的原因是numpy。

在你的setup.py文件中添加以下这一行应该能解决你的问题:

import numpy

撰写回答