Docker容器中Pytest无法找到Ghostscript共享对象.so文件
解决Docker容器中pytest无法找到libgs.so.9的问题
方案1:在Dockerfile中固化LD_LIBRARY_PATH
直接在Dockerfile里添加环境变量配置,确保容器启动后所有进程(包括pytest)都能读取到共享库路径:
# 先通过`find / -name libgs.so.9`查询实际路径,替换下方的路径段 ENV LD_LIBRARY_PATH="/usr/lib/x86_64-linux-gnu:/usr/local/lib:$LD_LIBRARY_PATH"
重新构建镜像后,pytest运行时会自动识别该路径,无需临时设置。
方案2:通过pytest配置文件手动加载共享库
在项目根目录创建conftest.py,利用pytest_configure钩子在pytest启动时手动加载libgs.so.9:
import ctypes import os def pytest_configure(config): # 替换为容器内libgs.so.9的实际路径 libgs_path = "/usr/lib/x86_64-linux-gnu/libgs.so.9" if os.path.exists(libgs_path): # RTLD_GLOBAL确保库中符号能被其他模块访问 ctypes.CDLL(libgs_path, mode=ctypes.RTLD_GLOBAL) else: raise FileNotFoundError(f"未找到libgs.so.9,路径:{libgs_path}")
pytest启动时会优先加载该共享库,避免后续依赖查找失败。
方案3:运行pytest时直接指定环境变量
跳过shell环境变量传递问题,直接在pytest命令前拼接LD_LIBRARY_PATH:
LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu pytest
注意替换为你实际查询到的libgs.so.9所在路径。
额外排查点
- 确认libgs.so.9路径:在容器内执行
find / -name libgs.so.9,确保路径无误 - 修复软链接:若
libgs.so缺失,手动创建软链接:ln -s /usr/lib/x86_64-linux-gnu/libgs.so.9 /usr/lib/x86_64-linux-gnu/libgs.so - 验证运行权限:确保pytest的运行用户与Python REPL一致,避免权限不足无法读取共享库
内容的提问来源于stack exchange,提问作者LittleFoxyFox
相关产品推荐
相关产品推荐

