文件可执行文件无法在 Raspberry Pi 上运行

问题描述 投票:0回答:2

我有一个 .py 文件 (

camera.py
),它被编程为从连接到 Raspberry Pi 的 USB 摄像头捕获图像。
camera.py
文件如下所示,并且正在按预期从 Raspberry Pi 的终端运行。

import cv2

cam = cv2.VideoCapture(0)

while True:
    ret, image = cam.read()
    cv2.imshow('Imagetest',image)
    k = cv2.waitKey(1)
    if k != -1:
        break
cv2.imwrite('/home/pi/testimage.jpg', image)
cam.release()
cv2.destroyAllWindows()

现在我想把这个

camera.py
文件变成一个独立的.exe,这就是我遇到麻烦的地方。

我尝试了两(2)种方法来实现这一目标; pyinstaller 和 auto-py-to-exe GUI。

在这两种情况下,我在构建 .exe 时都没有收到任何问题,但是当我单击运行它时,它什么也不做(当我单击“执行”以及“在终端中执行”时 - 在后一种情况下,终端窗户也打不开。)

当我尝试使用以下命令从终端手动执行文件时:

chmod a+x camera
./camera

我收到以下错误:

./camera: /lib/arm-linux-gnueabihf/libc.so.6: version `GLIBC_2.33' not found (required by ./camera)

./camera: /lib/arm-linux-gnueabihf/libc.so.6: version `GLIBC_2.34' not found (required by ./camera)

我猜测问题出在与GLIBC版本不兼容,所以我查了一下安装的版本,我的Debian 11中可用的最高版本是2.31。

enter image description here

如果确实是 glibc 版本问题,您能告诉我如何在我的 Debian 11 Raspberry Pi 中安装所需的版本吗?我猜我的谷歌搜索有问题。

如果不是版本不兼容,你能告诉我应该改正什么吗?

创建.desktop文件方法

根据建议,我按照此文档创建了一个 .desktop 文件(内容如下)。但该程序仍然无法启动视频流。一个窗口会立即打开,但仅此而已。

[Desktop Entry]
Version= 1.0
Icon= /home/pi3/videorec.png
Name= videorec
Exec=//home/pi3/camera.py
Terminal=true
Type=Application
python opencv raspberry-pi debian glibc
2个回答
1
投票

你不可能真正升级 glibc,而不引起巨大的连锁反应。更好的解决方案是首先在正确的平台上构建二进制文件;然后它将绑定到相同的 glibc 等版本。

换句话说,让 Python 脚本在目标计算机上运行,也许是在虚拟环境中(或者例如运行目标操作系统的 Docker 映像),然后运行

py2exe
或您在该环境中喜欢的任何工具来生成兼容的二进制文件.

但是,这引出了一个问题:为什么您要以二进制形式分发脚本。更可移植的解决方案是将其打包到常规 Python 包中,并让用户使用

pip
安装它。这允许他们在任何可用 Python 和脚本所依赖的库的平台上使用它。

要简单地创建一个允许您运行脚本的图标,请为其创建一个

.desktop
文件。 参见例如https://askubuntu.com/questions/342950/how-do-i-create-a-desktop-entry-to-launch-a-python-script


0
投票

我也有同样的问题。就我而言,使用

pyinstaller
的原因是我想在 cron-job 中调用二进制文件(而不是每次都创建适当的虚拟环境)。

在我的机器(Pi 4、Debian 11)上,“解决方案”是使用旧版本的 pyinstaller:

pip install pyinstaller==6.6.0
。使用此版本创建的二进制文件需要旧版本的
libc.so.6
,它显然安装在 Debian 系统上。

© www.soinside.com 2019 - 2024. All rights reserved.