由于我的项目是一个涉及多项图片处理功能的软件,项目中使用了 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 .
评论区