前提:代码在pycharm中运行畅通,但是打包成exe后,就报错:
大概主要意思就是:opencv依赖的包numpy未成功打包进去。
numpy.core.multiarray failed to import
看到有些博主说的,是opencv和numpy的版本问题,但是如果版本有问题,为什么pycharm上可以运行呢。然后也看到很多朋友尝试了,版本升级和降级并没有用。
后来看到很多其他人的方法:
比如打包的时候,不打包成一个文件 去掉-F参数,然后打包的时候会有一个文件夹,把原始的(PycharmProjects\pythonProject\venv\Lib\site-packages)numpy文件夹,复制到打包的dist目录下的你打包的文件夹中。然后尝试运行还是报错,然后发现有3个叫numpy的文件夹,分别是:
numpy
numpy.libs
numpy-1.26.1.dist-info
一股脑的全复制进去,结果运行成功了。
后来发现numpy.libs文件有个dll文件,如下:
libopenblas64__v0.3.23-293-gc2f4bdbb-gcc_10_3_0-2bde3a66a51006b2b53eb373ff767a3f.dll
ai说是一个动态链接库,
尝试手动把这个dll文件打包,结果成了,报错消失了。具体代码如下:
pyinstaller --hidden-import numpy --add-data "libopenblas64__v0.3.23-293-gc2f4bdbb-gcc_10_3_0-2bde3a66a51006b2b53eb373ff767a3f.dll;./" -F 你要打包的文件名****.py
要先把这个dll文件,复制到代码的 同级目录里面,再打包。
同理还有:pyzbar的报错 缺失:libzbar-64.dll ,libiconv.dll 都可以用相同的方式打包。
pyinstaller --hidden-import numpy --add-data "libiconv.dll;./" --add-data "libzbar-64.dll;./" --add-data "libopenblas64__v0.3.23-293-gc2f4bdbb-gcc_10_3_0-2bde3a66a51006b2b53eb373ff767a3f.dll;./" -F ***.py