使用cx-freeze打包时遭遇'libcamera._libcamera'模块未找到错误的解决方法
问题:cx-freeze打包含Picamera2的Python项目时缺失libcamera._libcamera模块
环境与打包背景
- Python版本:3.9.2
- cx-freeze版本:6.1.0
- 运行环境:树莓派4 64位Bullseye系统,搭配Pi Camera Module v3
- 打包尝试:最初使用PyInstaller,即使在hiddenImport中指定QGLPicamera仍无法完成打包;改用cx-freeze后,生成的可执行文件运行时出现模块缺失错误
报错信息
File "/home/pi/.local/lib/python3.9/site-packages/cx_Freeze/initscripts/__startup__.py", line 130, in run module_init.run(name + "__main__") File "/home/pi/.local/lib/python3.9/site-packages/cx_Freeze/initscripts/console.py", line 16, in run exec(code, module_main.__dict__) # pylint: disable=exec-used File "main.py", line 5, in <module> File "<frozen zipimport>", line 259, in load_module File "/home/pi/Desktop/SESA 6.0.0/src/elec_interface.py", line 2, in <module> from import_lib import * File "<frozen zipimport>", line 259, in load_module File "/home/pi/Desktop/SESA 6.0.0/src/import_lib.py", line 77, in <module> from picamera2 import Picamera2,Preview File "/usr/lib/python3/dist-packages/picamera2/__init__.py", line 1, in <module> import libcamera File "/usr/lib/python3/dist-packages/libcamera/__init__.py", line 4, in <module> from ._libcamera import * ModuleNotFoundError: No module named 'libcamera._libcamera'
当前使用的setup.py配置
from cx_Freeze import setup, Executable options= { 'build_exe':{ 'packages' : ['libcamera'], 'build_exe' : '../dist/', } } setup( name = "SESA", version = "6.0", description = "", options = options, executables = [Executable("main.py")] )
解决思路
手动复制C扩展模块文件:
libcamera._libcamera是C扩展模块,对应系统中的_libcamera.so文件(路径通常为/usr/lib/python3/dist-packages/libcamera/_libcamera.so)。在setup.py的build_exe选项中添加include_files参数,将该文件复制到打包后的对应目录:
修改后的options示例:options= { 'build_exe':{ 'packages' : ['libcamera', 'picamera2'], 'build_exe' : '../dist/', 'include_files': [('/usr/lib/python3/dist-packages/libcamera/_libcamera.so', 'libcamera/_libcamera.so')] } }注意:先通过
ls /usr/lib/python3/dist-packages/libcamera/确认该文件存在,路径需匹配实际系统位置。强制指定包含子模块:在
build_exe选项中添加'includes': ['libcamera._libcamera'],让cx-freeze明确识别并处理这个子模块。检查并复制所有依赖文件:查看libcamera目录下的其他必要文件(如相关.so库),如果有需要,一并加入
include_files列表中。验证打包后的文件结构:打包完成后,进入
../dist/libcamera/目录,确认_libcamera.so是否存在;若未自动复制,手动将文件拷贝到该目录后再测试运行。
内容的提问来源于stack exchange,提问作者Rino1234
相关产品推荐
相关产品推荐

