You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署至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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 17:05:14