我有一个使用pyinstaller在x86处理器中打包的软件,它打包了包括cv2在内的所有库,但是,当我尝试在Jetson TX2中打包相同的软件时,它不会打包cv2并在执行二进制文件时抛出错误:
OpenCV loader: missing configuration file: ['config.py']
原因是cv2在不同的位置(/usr/lib/python3.6/dist-packages
)预装在TX2中。但是,我们自行安装的其他库都在(/home/mnauf/.local/lib/python3.6/site-packages
)中,这可能就是pyinstaller无法打包它的原因。
pyinstaller试图在cv2上找到/home/mnauf/.local/lib/python3.6/site-packages
,但是没有找到相应的包,但是如果您用python进行cv2导入就可以了。cv2在python中运行良好的原因是,我认为python首先尝试在/home/mnauf/.local/lib/python3.6/site-packages
中找到一个库,如果不成功,则在/usr/lib/python3.6/dist-packages
中找到。
为了解决打包问题,我尝试了以下方法,下面讨论的错误都是在执行二进制文件时出现的,并且在打包时不会出现:
/usr/lib/python3.6/dist-packages
复制到/home/mnauf/.local/lib/python3.6/site-packages
。它给出:ImportError: ERROR: recursion is detected during loading of "cv2" binary extensions. Check OpenCV installation.
/usr/lib/python3.6/dist-packages
复制到由pyinstaller创建的dist/main
文件夹,但是我得到了相同的导入错误.main.spec
中的数据文件,也只将文件夹复制到dist/main
,从而给出相同的导入错误。cv2.cpython-36m-aarch64-linux-gnu.so
路径作为main.spec中的数据文件添加,会导致Opencv loader
错误。作为二进制文件路径在Import error
.中添加cv2目录的
cv2.cpython-36m-aarch64-linux-gnu.so
路径作为二进制文件添加到main.spec中,这会导致Opencv loader
错误。请帮我打包cv2。谢谢
发布于 2021-02-02 06:06:35
我将/usr/lib/python3.6/dist-packages/cv2/python-3.6/cv2.cpython-36m-aarch64-linux-gnu.so
复制到/home/mnauf/.local/lib/python3.6/site-packages/
中,然后从python导入cv2,并通过这样做检查了从哪里导入的cv2:
import cv2
cv2.__file__
它还给了我我想要的路,也就是/home/mnauf/.local/lib/python3.6/site-packages/
。一旦确信cv2确实在使用我想要的目录,我就运行pyinstaller并打包了cv2依赖项。
以前,在创建可执行文件之前,我已经复制了整个文件夹。这一次,在创建可执行文件之前,我只复制了.so
文件,并且它工作了。
我认为“创建可执行文件之前的,”也是其中的诀窍。您不能只将.so
文件复制到dist/main
并期望它正常工作。另外,我们得出的结论是,在.so
中以data file
或binary file
的形式提供main.spec
文件路径是行不通的。
https://stackoverflow.com/questions/65997841
复制相似问题