pyinstaller - Pyinstaller 不会在 jetson 中打包 cv2
问题描述
我有一个使用 pyinstaller 打包在 x86 处理器中的软件,它打包了包括 cv2 在内的所有库,但是,当我尝试在 Jetson TX2 中打包相同的软件时,它不打包 cv2 并在执行二进制文件时抛出错误:
OpenCV loader: missing configuration file: ['config.py']
原因是 cv2 预装在 TX2 中的不同位置 ( /usr/lib/python3.6/dist-packages
)。但是,我们自行安装的其余库都在 ( /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
.
为了解决打包问题,我尝试了以下方法,下面讨论的错误都是在执行二进制文件时出现的,而不是在打包时出现的:
- 将 cv2 从复制
/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.
我尝试将 cv2 目录从打包后复制到 pyinstaller
/usr/lib/python3.6/dist-packages
创建dist/main
的文件夹,但我得到相同的导入错误。将 cv2 目录路径添加为数据文件
main.spec
也只会将文件夹复制到dist/main
,因此会产生相同的导入错误。cv2.cpython-36m-aarch64-linux-gnu.so
仅在 main.spec 中将路径添加为数据文件会Opencv loader
出错。在 main.spec 中将 cv2 目录添加为二进制文件路径会给出
Import error
.cv2.cpython-36m-aarch64-linux-gnu.so
在 main.spec 中仅将路径添加为二进制文件会产生错误Opencv loader
。
请帮我打包cv2。谢谢
解决方案
我复制/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 并通过执行以下操作检查它的导入位置:
import cv2
cv2.__file__
它返回了我想要的路径,即/home/mnauf/.local/lib/python3.6/site-packages/
。一旦确信 cv2 确实在使用我想要的目录,我运行 pyinstaller 并打包了 cv2 依赖项。
以前,我在创建其可执行文件之前复制了整个文件夹。这次我只复制了.so
文件,然后再创建可执行文件并且它起作用了。
而且我认为“在创建可执行文件之前”也是诀窍。您不能只是将.so
文件复制到dist/main
并期望它能够工作。此外,我们得出的结论是,将.so
文件路径指定为data file
或binary file
inmain.spec
是行不通的。
推荐阅读
- c++ - C++ 对现有或新变量的条件引用
- php - Apache 持有 PHP 文件的文件锁定直到关闭
- django - PyCharm:使用 Heroku 运行 Django 测试
- python-3.x - 使用 For 循环动态设置类变量值
- oracle - Is there any method to truncate date, so that it remains using index by date
- java - 如何在对模拟静态方法的顺序调用中返回多个答案
- java - 如何自动列出 java + React 项目中使用的所有第三方组件?
- c# - Asp.net SignalR 功能在 asp.net 核心中不起作用
- javascript - 为什么“light.castShadow = true”会导致我的场景中断?
- c# - 如何检查图像是否被手指移动?(操纵)