在Devbox中,运行Flask项目,报错:ImportError: libGL.so.1: cannot open shared object file: No such file or directory

编辑

由于我的项目是一个涉及多项图片处理功能的软件,项目中使用了 OpenCV 相关的依赖库,在我本地 Ubuntu 环境中开发时正常,在 Devbox 构建 Python 环境后启动项目就报错了。

报错信息如下:

Traceback (most recent call last):
  File "/home/kyle/python_project/img_tools_box/img_tools/run.py", line 8, in <module>
    app = create_app()
  File "/home/kyle/python_project/img_tools_box/img_tools/app/__init__.py", line 26, in create_app
    from app.routes.main_routes import main_bp
  File "/home/kyle/python_project/img_tools_box/img_tools/app/routes/main_routes.py", line 15, in <module>
    from app.services.background_service import BackgroundService
  File "/home/kyle/python_project/img_tools_box/img_tools/app/services/background_service.py", line 6, in <module>
    from app.services.image_service import remove_background
  File "/home/kyle/python_project/img_tools_box/img_tools/app/services/image_service.py", line 1, in <module>
    from rembg import remove, new_session
  File "/home/kyle/python_project/img_tools_box/.venv/lib/python3.10/site-packages/rembg/__init__.py", line 5, in <module>
    from .bg import remove
  File "/home/kyle/python_project/img_tools_box/.venv/lib/python3.10/site-packages/rembg/bg.py", line 7, in <module>
    from cv2 import (
  File "/home/kyle/python_project/img_tools_box/.venv/lib/python3.10/site-packages/cv2/__init__.py", line 181, in <module>
    bootstrap()
  File "/home/kyle/python_project/img_tools_box/.venv/lib/python3.10/site-packages/cv2/__init__.py", line 153, in bootstrap
    native_module = importlib.import_module("cv2")
  File "/home/kyle/python_project/img_tools_box/.devbox/nix/profile/default/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
ImportError: libGL.so.1: cannot open shared object file: No such file or directory

查询多张解决方案后,实测能够解决问题的方案如下:

# 根据你所使用的 Linux 发行版,你需要安装 libGL 库。不同的 Linux 发行版安装方法稍有不同
sudo apt install libgl1-mesa-glx

# 使用的是图像处理库(如 OpenCV)并且该库依赖于 OpenGL,可以通过安装 OpenGL 相关库来解决该问题
sudo apt install libopengl0

安装之后,在 Devbox 中启动项目还是报错,最后发现是环境变量的问题。

首先,查找 libGL.so.1 的位置:

sudo find / -name libGL.so.1

这个命令会列出系统中所有的 libGL.so.1 文件的位置。
如果你找到了这个文件,可以将它的路径加入到 LD_LIBRARY_PATH 环境变量中。

export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH

注意:重启后就会消失,为了永久生效,你可以将这个 export 命令添加到 ~/.bashrc~/.bash_profile 中:

echo 'export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

如果你的 Flask 应用在 Docker 容器中运行,可能需要在 Dockerfile 中添加相应的库安装步骤。
例如,在基于 Ubuntu 的镜像中,你可以在 Dockerfile 中添加如下内容:

RUN apt-get update && apt-get install -y libgl1-mesa-glx

然后重新构建 Docker 镜像:

docker build -t your_image_name .

评论区

暂无评论,快来抢沙发