部署至Railway时出现OSError:无法加载gobject-2.0-0库求助
解决Railway部署时WeasyPrint依赖gobject-2.0-0缺失的问题
你遇到的错误是因为Railway的默认容器镜像未安装WeasyPrint运行所需的系统级依赖库,错误日志如下:
from . import views File "/app/account/views.py", line 2, in <module> from weasyprint import HTML, CSS File "/opt/venv/lib/python3.10/site-packages/weasyprint/__init__.py", line 336, in <module> from .css import preprocess_stylesheet # noqa isort:skip File "/opt/venv/lib/python3.10/site-packages/weasyprint/css/__init__.py", line 25, in <module> from . import computed_values, counters, media_queries File "/opt/venv/lib/python3.10/site-packages/weasyprint/css/computed_values.py", line 9, in <module> from ..text.ffi import ffi, pango, units_to_double File "/opt/venv/lib/python3.10/site-packages/weasyprint/text/ffi.py", line 398, in <module> gobject = _dlopen( File "/opt/venv/lib/python3.10/site-packages/weasyprint/text/ffi.py", line 385, in _dlopen return ffi.dlopen(names[0]) # pragma: no cover File "/opt/venv/lib/python3.10/site-packages/cffi/api.py", line 150, in dlopen lib, function_cache = _make_ffi_library(self, name, flags) File "/opt/venv/lib/python3.10/site-packages/cffi/api.py", line 832, in _make_ffi_library backendlib = _load_backend_lib(backend, libname, flags) File "/opt/venv/lib/python3.10/site-packages/cffi/api.py", line 827, in _load_backend_lib raise OSError(msg) OSError: cannot load library 'gobject-2.0-0': gobject-2.0-0: cannot open shared object file: No such file or directory. Additionally, ctypes.util.find_library() did not manage to locate a library called 'gobject-2.0-0'
本地和Heroku能正常运行,是因为本地环境大概率已预装GTK相关系统库,Heroku的Python buildpack会自动处理WeasyPrint的依赖(或你之前用了专门的WeasyPrint buildpack),但Railway不会自动安装这些非Python依赖,需手动配置。
解决方法
方法一:使用Dockerfile(推荐,可控性更强)
在项目根目录创建Dockerfile,内容如下:
# 基于Python 3.10的轻量镜像 FROM python:3.10-slim # 设置工作目录 WORKDIR /app # 安装WeasyPrint所需的系统依赖 RUN apt-get update && apt-get install -y --no-install-recommends \ libgobject-2.0-0 \ libcairo2 \ libpango-1.0-0 \ libpangocairo-1.0-0 \ libgdk-pixbuf2.0-0 \ && rm -rf /var/lib/apt/lists/* # 清理缓存减小镜像体积 # 复制依赖文件并安装Python包 COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 复制项目代码 COPY . . # 启动命令(根据你的项目调整,比如Django用gunicorn,Flask用gunicorn或flask run) CMD ["gunicorn", "your_project_name.wsgi:application", "--bind", "0.0.0.0:$PORT"]
将your_project_name替换为实际项目名称,把Dockerfile推送到代码仓库后,Railway会自动识别并使用它构建镜像。
方法二:使用Nixpacks配置文件(无需写Dockerfile)
若不想用Dockerfile,在项目根目录创建nixpacks.toml文件,添加系统依赖配置:
[phases.setup] aptPkgs = ["libgobject-2.0-0", "libcairo2", "libpango-1.0-0", "libpangocairo-1.0-0", "libgdk-pixbuf2.0-0"]
Railway默认用Nixpacks构建,会读取该配置文件并在构建阶段安装指定的系统包。
完成配置后重新部署项目,WeasyPrint即可找到所需的gobject库,错误将被解决。
内容的提问来源于stack exchange,提问作者Chidera Ferdinand
相关产品推荐
相关产品推荐

