Pyinstaller 不在 jetson 中打包 cv2
Pyinstaller doesnt package cv2 in jetson
我有一个软件,我使用 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 尝试在 /home/mnauf/.local/lib/python3.6/site-packages
处找到 cv2,但没有找到,因此也没有打包,但是如果您使用 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 目录从 /usr/lib/python3.6/dist-packages
复制到打包后由 pyinstaller 创建的 dist/main
文件夹,但我得到相同的导入错误。
在 main.spec
中将 cv2 目录路径添加为数据文件也只会将文件夹复制到 dist/main
,因此会出现相同的导入错误。
仅将 cv2.cpython-36m-aarch64-linux-gnu.so
路径作为数据文件添加到 main.spec 中会出现 Opencv loader
错误。
将 cv2 目录作为二进制文件路径添加到 main.spec 中得到 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
并期望它能正常工作。此外,我们得出结论,在 main.spec
中将 .so
文件路径指定为 data file
或 binary file
是行不通的。
我有一个软件,我使用 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 尝试在 /home/mnauf/.local/lib/python3.6/site-packages
处找到 cv2,但没有找到,因此也没有打包,但是如果您使用 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 目录从
/usr/lib/python3.6/dist-packages
复制到打包后由 pyinstaller 创建的dist/main
文件夹,但我得到相同的导入错误。在
main.spec
中将 cv2 目录路径添加为数据文件也只会将文件夹复制到dist/main
,因此会出现相同的导入错误。仅将
cv2.cpython-36m-aarch64-linux-gnu.so
路径作为数据文件添加到 main.spec 中会出现Opencv loader
错误。将 cv2 目录作为二进制文件路径添加到 main.spec 中得到
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
并期望它能正常工作。此外,我们得出结论,在 main.spec
中将 .so
文件路径指定为 data file
或 binary file
是行不通的。