我正在尝试在安装了 Raspbian 的虚拟机上安装 pvrecorder。我得到了一些记录用户麦克风的 Python 脚本,直到触发
KeyboardInterrupt
(用户按下Ctrl
+ C
)。我已经在我的 Windows 机器上对其进行了测试,一切运行顺利。问题是,我在运行脚本后遇到了一些错误,这来自于安装的pvrecorder
.
Raspbian 是一个 x86 build.
首先,我使用以下命令创建虚拟环境:
python3 -m venv venv
并使用 source venv/bin/activate
激活它。
然后,我正在安装 pvrecorder 和
pip3 install pvrecorder
。一切顺利。
问题是,当我尝试运行我的 script.py 时,它以这一行开头:
from pvrecorder import PvRecorder
这是我收到的错误:
OSerror: /home/pi/Desktop/proj/venv/lib/python3.7/site-packages/pvrecorder/lib/linux/i686/libpv_recorder.so: cannot open shared object file: No such file or directory
我也试过 NOT 在单独创建的 venv 中安装
pvrecorder
,但是直接安装,没有激活任何特定的虚拟环境。当我查看 /home/pi/.local/lib/python3.7/site-packages/pvrecorder/lib/linux/
内部时,我没有看到任何 i686
文件夹,而是一个包含我的 x64_86
文件的 .so
文件夹。
当我尝试将该
.so
文件复制到新创建的 i686
文件夹中时,它在尝试启动时给了我另一个错误script.py
:
wrong ELF class: ELFCLASS64
我阅读了一些其他类似的 Stack Overflow 答案,用户被告知这可能是因为我正在为 x64 库使用 x86 操作系统,但 pvrecorder 的网站声明他们的模块可用于 x86 和 x64 Raspbian 构建.
手动编译
pvrecorder
似乎已经解决了这个问题。
问题是,pip 安装总是导致
x64
库输出。我需要一个x86
一个。
首先,我需要克隆 pvrecorder 存储库。
然后,我安装了
cmake
:
sudo apt upgrade
sudo apt-get install cmake
然后我编译了模块(按照这个链接 - 官方 GitHub 回购 - 并转到“编译”部分)。
模块编译完成后,需要将生成的
.so
文件从pvrecorder/build/
(即编译生成的build
文件夹的克隆仓库)复制到路径:
/home/pi/Desktop/proj/venv/lib/python3.7/site-packages/pvrecorder/lib/linux/i686
(我手动创建了文件夹i686
)。
这意味着,您还需要通过
pip
在您的环境中安装模块。