Ubuntu 22.04 安装 LibreTranslate 1.9.6 指南

Ubuntu 22.04 从零安装 LibreTranslate 1.9.6:venv+pip 在线直装与离线 wheels 双方案、语言模型下载实测(14 包 1.9GB 约 2 分钟)、systemd 托管与排障实录。

LibreTranslateLibreTranslateUbuntu 22.04Python机器翻译2026/10/28

Ubuntu 22.04 安装 LibreTranslate 1.9.6 指南

目标:在 Ubuntu 22.04 服务器上从零安装 LibreTranslate 1.9.6,采用 venv + pip 直装 + systemd 托管的生产形态,覆盖语言模型下载(耗时与磁盘占用的真实数据)、离线 wheels 备用方案与排障实录。已在 Ubuntu 22.04 (x86_64, 6 核 / 18GB 内存) 实测通过,全文命令与回显均为实测记录。

一、环境信息

本文实测环境(真实服务器视角):

  • 操作系统:Ubuntu 22.04.5 LTS(x86_64)
  • 硬件:6 核 CPU / 18GB 内存 / 295GB 磁盘
  • Python:系统自带 Python 3.10.12
  • 软件版本:LibreTranslate 1.9.6(当前最新稳定版,2026-10-28 实查 PyPI)
  • 部署形态:venv 隔离安装 + systemd 托管,服务监听 5000 端口
  • 安装目录:/opt/libretranslate(venv 所在),语言模型目录:~/.local/share/argos-translate
  • 网络环境:国际网络直连缓慢,代理 192.168.1.62:7897 实测可用(见 4.3 与 8.1 的降级说明)

核对命令与回显:

cat /etc/os-release | head -2
PRETTY_NAME="Ubuntu 22.04.5 LTS"
NAME="Ubuntu"
python3 --version
Python 3.10.12

💡 技术拓展:Python 多版本共存时,venv 是隔离第三方依赖的标准做法——在虚拟环境目录内生成一套独立的 python/pip,安装的包只作用于该环境,不污染系统 site-packages。同类方案对比:venv(官方内置、轻量,本文采用)、virtualenv(第三方、兼容老 Python)、conda(科学计算生态、体积大)、pipx(面向 CLI 应用隔离)、系统 pip 直装(易与 apt 管理的 Python 包冲突,Ubuntu 22.04 的 pip 会提示 PEP 668 externally-managed 限制)。LibreTranslate 官方支持 Python >=3.8,Ubuntu 22.04 自带 3.10 正合适。

二、前置条件

安装 LibreTranslate 前需要确认以下条件:

  1. 服务器可访问外网(下载 pip 包与语言模型),或已备好离线包(方案 B);
  2. Python 3.8+ 与 venv 模块(Ubuntu 22.04 需显式安装 python3-venv);
  3. 基础工具:curl(健康检查)、jq(JSON 格式化,可选)、sqlite3(查看 API Key 库,可选);
  4. 磁盘空间:按需规划语言模型占用——本文实测 8 种语言(14 个语言对)占 1.9GB,单个语言对模型 82MB–302MB 不等(见 4.4);
  5. root 或具备 sudo 权限的账号(本文以 root 演示)。

安装前置依赖:

apt-get update -qq
apt-get install -y -qq python3-venv python3-pip curl jq sqlite3
Extracting templates from packages: 100%
Preconfiguring packages ...

⚠️ 说明:-qq 静默模式下 apt 仅输出少量摘要;依赖安装完成后可用 python3 -m venv /tmp/vtest 验证 venv 模块可用(生成成功即 OK,验证后删除):

python3 -m venv /tmp/vtest && echo VENV_OK && rm -rf /tmp/vtest
VENV_OK
pip3 --version
pip 22.0.2 from /usr/lib/python3/dist-packages/pip (python 3.10)

三、版本选型说明

版本发布时间(PyPI)说明
1.9.62026-05-27当前最新稳定版,本文选型。GitHub Releases 对应标签 v1.9.6(变更:土耳其语界面等)
1.9.4较早修复文件翻译(PR #948)
1.9.0较早移除 pytorch、stanza 依赖(PR #938),推理栈更轻;引入语言变体回退
1.8.4较早新增 --translation-cache(PR #912);Docker 健康检查(PR #906)

选型结论:新装直接上 1.9.6(PyPI pip install libretranslate 默认即最新版)。查询到更新版本时,用 pip index versions libretranslate 或 PyPI 页面 https://pypi.org/project/libretranslate/ 复核,不要硬编码旧版本号。版本升级方法见 8.6。

四、在线安装方案(A:venv + pip 直装,推荐)

4.1 方案说明与目录规划

本方案从 PyPI 官方源直装 LibreTranslate 到独立 venv,再由 systemd 托管为常驻服务。目录规划:

路径用途
/opt/libretranslate应用根目录(含 venv、日志、密钥库)
/opt/libretranslate/venvPython 虚拟环境
~/.local/share/argos-translate/语言模型与包索引(root 用户安装即 root 家目录)
/etc/systemd/system/libretranslate.servicesystemd 服务单元

4.2 创建虚拟环境

python3 -m venv /opt/libretranslate/venv
/opt/libretranslate/venv/bin/pip install --upgrade pip -q
/opt/libretranslate/venv/bin/pip --version
pip 26.2.2 from /opt/libretranslate/venv/lib/python3.10/site-packages/pip (python 3.10)

venv 内 pip 已升级到 26.2.2(区别于系统 pip 22.0.2)。

4.3 安装 libretranslate(含网络降级实录)

首次尝试直连 PyPI 官方源(2026-10-28 实测):pip install libretranslate 运行超过 10 分钟仍未完成依赖下载,判定直连不可用。

降级走代理后重试(⚠️ 网络说明:官方 PyPI 源当时直连拉取极慢,改走代理 192.168.1.62:7897,实测 23.6 秒完成;该代理当时可用):

cd /tmp
time /opt/libretranslate/venv/bin/pip install --proxy http://192.168.1.62:7897 libretranslate 2>&1 | tail -6
Successfully built flask-swagger langdetect pysrt
Installing collected packages: pytz, polib, mpmath, lexilang, flatbuffers, expiringdict, commonmark, wrapt, waitress, urllib3, tzlocal, typing-extensions, tqdm, sympy, soupsieve, six, sentencepiece, regex, PyYAML, PyMuPDF, pygments, protobuf, prometheus-client, packaging, numpy, MarkupSafe, lxml, itsdangerous, idna, humanfriendly, filelock, cloudpickle, click, charset-normalizer, chardet, certifi, Babel, async-timeout, werkzeug, rich, requests, redis, pysrt, langdetect, joblib, Jinja2, deprecated, ctranslate2, coloredlogs, beautifulsoup4, apscheduler, sacremoses, onnxruntime, limits, flask, minisbd, flask-swagger-ui, flask-swagger, flask-limiter, argos-translate-lt, argos-translate-files, libretranslate

Successfully installed Babel-2.18.0 Jinja2-3.1.6 MarkupSafe-3.0.4 PyMuPDF-1.28.2 PyYAML-6.0.3 apscheduler-3.11.2 argos-translate-files-1.4.4 argos-translate-lt-1.12.1 async-timeout-5.0.1 beautifulsoup4-4.9.3 certifi-2026.10.23 chardet-7.7.0 charset-normalizer-3.5.2 click-8.5.0 cloudpickle-3.1.2 expiringdict-1.2.2 filelock-4.1.0 flask-2.2.5 flask-babel-3.1.0 flask-limiter-2.6.3 flask-swagger-0.2.14 flask-swagger-ui-4.11.1 flatbuffers-25.12.19 humanfriendly-10.0 idna-3.20 itsdangerous-2.1.2 joblib-1.6.0 langdetect-1.0.9 lexilang-1.0.7 libretranslate-1.9.6 limits-5.8.0 lxml-6.1.3 minisbd-0.9.5 mpmath-1.3.0 numpy-1.26.4 onnxruntime-1.23.2 packaging-23.1 polib-1.1.1 prometheus-client-0.15.0 protobuf-7.36.2 pytz-2026.5 redis-4.4.4 regex-2026.9.29 requests-2.31.0 rich-12.6.0 sacremoses-0.1.1 sentencepiece-0.2.2 six-1.17.0 soupsieve-2.10 sympy-1.14.0 tqdm-4.70.1 typing-extensions-4.16.0 tzlocal-5.4.5 urllib3-2.8.0 waitress-2.1.2 werkzeug-2.3.8 wrapt-2.5.1

real	0m23.585s
user	0m10.789s
sys	0m1.979s

(输出为节选:time 计时行之后略去了部分纯依赖包条目,首尾均为实测原文。)

关键安装结果:

  • libretranslate-1.9.6:主服务;
  • argos-translate-lt-1.12.1:LibreTranslate 定制版的 Argos Translate 引擎(注意包名带 -lt 后缀,与社区版 argostranslate 是同源分支);
  • argos-translate-files-1.4.4:文件翻译支持(docx/pdf/srt 等);
  • ctranslate2-4.8.4:神经网络推理运行时;
  • waitress-2.1.2:生产 WSGI 服务器(--threads 参数即作用于它)。

版本复核(libretranslate CLI 不支持 --version 参数,用 pip 元数据查询):

/opt/libretranslate/venv/bin/pip show libretranslate | head -2
Name: libretranslate
Version: 1.9.6
/opt/libretranslate/venv/bin/python3 -c "from importlib.metadata import version; print(version('libretranslate'))"
1.9.6
/opt/libretranslate/venv/bin/libretranslate --version
libretranslate: error: unrecognized arguments: --version

⚠️ 注意:libretranslate --version 在 1.9.6 会直接报 unrecognized arguments 错误,这不是安装问题。查版本请用上面两种 pip 方式。

4.4 首次启动与语言模型下载(部署期重点)

LibreTranslate 不随软件分发模型。首次启动时检测到已装语言包少于 2 个,会自动从社区 Argos 索引下载语言包后再开始服务——这是部署期最大的耗时与磁盘变量。

启动命令先只指定监听与语言范围(--load-only 限定加载的语言,避免全量下载;此处选 8 种常用语言:英/中/日/韩/德/法/西/俄,对应 14 个语言对模型):

export http_proxy=http://192.168.1.62:7897 https_proxy=http://192.168.1.62:7897
cd /opt/libretranslate
/opt/libretranslate/venv/bin/libretranslate --host 0.0.0.0 --port 5000 --load-only en,zh,ja,ko,de,fr,es,ru

实测下载进度与磁盘占用(另开终端采样 du -sh ~/.local/share/argos-translate/packages/ 与包计数):

采样时点已装语言包磁盘占用
约 +45 秒9 个1.1GB
约 +105 秒14 个(全部完成,服务已响应 /health)1.9GB

结论:14 个语言包共 1.9GB,走代理实测约 2 分钟完成下载与安装,随后服务自动开始监听。

模型下载过程的启动日志(用 python3 -u 关闭缓冲后另取一次小规模实测,--load-only en,zh 仅 2 个语言包,日志更完整、便于逐行讲解):

Updating language models
Found 100 models
Keep 2 models
Downloading Chinese → English (1.9) ...
Downloading English → Chinese (1.9) ...
Downloading MiniSBD models
Downloading model: en
Loaded support for 2 languages (2 models total)!
Running on http://0.0.0.0:5000

日志逐行解读:

  • Updating language models:更新语言包索引(仅当已装包少于 2 个、或带 --update-models/--force-update-models 启动时才会联网);
  • Found 100 models:社区索引当前共 100 个语言对模型、覆盖 50 种语言(zh 与 zt 分别对应简体 zh-Hans 与繁体 zh-Hant);
  • Keep N models:按 --load-only 过滤后实际要下载的数量;
  • Downloading Chinese → English (1.9) ...:逐对下载,(1.9) 是模型包版本;
  • Downloading MiniSBD models:句子边界切分模型(服务按句子切分送入引擎);
  • Loaded support for N languages:加载完成;
  • Running on http://0.0.0.0:5000:服务就绪。

磁盘占用实测量级(按语言对,du -sh 实测,供容量规划参考):

du -sh ~/.local/share/argos-translate/packages/* | sort -rh | head -5
302M	/root/.local/share/argos-translate/packages/translate-es_en-1_9
208M	/root/.local/share/argos-translate/packages/translate-en_ru-1_9
166M	/root/.local/share/argos-translate/packages/translate-ru_en-1_9
158M	/root/.local/share/argos-translate/packages/translate-en_de-1_3
158M	/root/.local/share/argos-translate/packages/translate-de_en-1_3
du -sh ~/.local/share/argos-translate/packages/ && du -sh ~/.local/share/argos-translate/index.json
1.9G	/root/.local/share/argos-translate/packages/
36K	/root/.local/share/argos-translate/index.json

单个语言对模型在 82MB(英→中)到 302MB(西→英)之间;若 --load-only 不加限制,首次启动会尝试下载全部 100 个语言对,磁盘需按 15GB+ 预估——生产环境强烈建议显式 --load-only。

验证服务已就绪(新终端):

curl -s http://127.0.0.1:5000/health
{"status":"ok"}

⚠️ 注意:如果 shell 里导出过 http_proxy/https_proxy 环境变量,本机 curl 会被劫持到代理导致响应为空——本机验证时请取消代理变量,或显式加 --noproxy '*'(排障实录见 8.4)。

手动启动验证完成后 Ctrl+C 停止,进入 systemd 托管(模型已落盘,二次启动不再联网下载)。

4.5 已装模型清点(可选)

/opt/libretranslate/venv/bin/argospm list
translate-en_ja
translate-en_de
translate-en_zh
translate-es_en
translate-de_en
translate-ko_en
translate-fr_en
translate-ja_en
translate-en_ko
translate-ru_en
translate-en_es
translate-zh_en
translate-en_fr
translate-en_ru

14 个语言包与 --load-only 设定的 8 语言对应关系:en↔zh、en↔ja、en↔ko、en↔de、en↔fr、en↔es、en↔ru 共 14 个方向。argospm 命令族的完整用法见命令详解篇。

五、离线安装方案(B:wheels 离线包 + 语言包离线迁移)

5.1 方案说明

目标环境完全无法访问外网时,在一台同架构、同 Python 大版本(x86_64 / Python 3.10)的有网机器上用 pip download 备齐全部 wheel 包与语言包,拷贝到内网服务器离线安装。

5.2 在有网机器下载 wheels

mkdir -p /opt/wheels
cd /opt/wheels
time /opt/libretranslate/venv/bin/pip download libretranslate -d /opt/wheels -q
ls /opt/wheels | wc -l
du -sh /opt/wheels
real	0m14.920s
user	0m3.983s
sys	0m0.645s
63
136M	/opt/wheels

63 个 wheel、共 136MB(走代理实测 15 秒)。⚠️ 网络说明:pip download 与 pip install 一样支持 --proxy http://192.168.1.62:7897;本文实测网络下直连缓慢、代理可用。

5.3 内网服务器离线安装

把 /opt/wheels 整体拷贝到内网服务器(scp/U 盘均可),然后建 venv 离线安装:

python3 -m venv /opt/libretranslate/venv-offline
time /opt/libretranslate/venv-offline/bin/pip install --no-index --find-links /opt/wheels libretranslate -q
/opt/libretranslate/venv-offline/bin/python3 -c "from importlib.metadata import version; print(version('libretranslate'))"
real	0m10.369s
user	0m8.776s
sys	0m1.470s
1.9.6

--no-index 禁用一切远端源、只从 --find-links 本地目录取包,10 秒装完。验证 CLI 可用:

/opt/libretranslate/venv-offline/bin/libretranslate --help 2>&1 | head -3
usage: libretranslate [-h] [--host HOST] [--port PORT]
                      [--char-limit <number of characters>]
                      [--req-limit <number>]

5.4 语言模型离线迁移

离线环境无法在首次启动时下载模型。在有网机器上完成一次方案 A 安装(或最小化 --load-only 下载),再把两部分拷贝到内网服务器的相同路径:

  1. 包索引:~/.local/share/argos-translate/index.json(36KB);
  2. 语言包:~/.local/share/argos-translate/packages/ 整个目录(按需裁剪,只留目标语言对)。

拷贝完成后直接按第七章配置 systemd 启动——启动时已装包数量 ≥2 且未带 --update-models,服务不会发起任何联网请求,直接加载本地语言包(首次启动日志将直接显示 Loaded support for N languages (N models total)! 与 Running on http://...,无 Updating/Downloading 行)。

六、方案对比与选择建议

维度方案 A:venv + pip 在线方案 B:wheels 离线包
是否需联网安装期需(PyPI + Argos 索引)安装期零联网
安装耗时(本文实测)23.6s(代理)+ 模型约 2 分钟有网侧 15s 下载;内网侧 10.4s 安装
版本新鲜度默认最新稳定版冻结在制作离线包当日版本
升级方式pip 直接升级重新制作离线包
适用可出网的常规服务器内网隔离 / 合规环境

选择建议:能出网选 A(省事、版本新);内网/合规环境选 B,且离线包与语言包一次性备齐。两方案的 systemd 配置完全一致(第七章)。

七、配置说明与 systemd 托管

7.1 服务单元文件

创建 /etc/systemd/system/libretranslate.service:

[Unit]
Description=LibreTranslate Translation API
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/opt/libretranslate
ExecStart=/opt/libretranslate/venv/bin/libretranslate --host 0.0.0.0 --port 5000 --load-only en,zh,ja,ko,de,fr,es,ru --threads 4
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

逐项说明:

  • After=network.target:网络就绪后再启动;
  • User=root:演示环境用 root;生产建议建独立系统用户(模型目录随之变为该用户的 ~/.local/share/argos-translate);
  • WorkingDirectory=/opt/libretranslate:相对路径(如 API Key 库默认 db/api_keys.db)都以它为基准;
  • ExecStart:venv 内的绝对路径 CLI;--host 0.0.0.0 对外监听(默认 127.0.0.1 仅本机);--load-only 与 4.4 实测保持一致;--threads 4 为 HTTP 工作线程数(作用于 waitress,默认 4);
  • Restart=on-failure + RestartSec=5:异常退出 5 秒后自动拉起;
  • 所有 CLI 参数都有对应的 LT_ 前缀环境变量(如 LT_PORT=5000),systemd 中可用 Environment= 注入,详见配置参数详解篇。

7.2 启动与开机自启

systemctl daemon-reload
systemctl enable libretranslate
Created symlink /etc/systemd/system/multi-user.target.wants/libretranslate.service → /etc/systemd/system/libretranslate.service.
systemctl start libretranslate

7.3 验证

systemctl is-active libretranslate
active
systemctl status libretranslate --no-pager -l
● libretranslate.service - LibreTranslate Translation API
     Loaded: loaded (/etc/systemd/system/libretranslate.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2026-10-28 13:09:03 UTC; 8s ago
   Main PID: 4240 (libretranslate)
      Tasks: 12 (limit: 2932)
     Memory: 66.7M
        CPU: 618ms

(输出节选:略去 CGroup 明细与日志行。)服务重启到可响应的实测耗时:模型已在本地时约 2–6 秒(轮询 /health 实测 READY at +2s);启动初期 Memory 约 67MB,翻译请求发生后按需加载模型内存增长至约 200–260MB(systemctl status 的 Memory 字段与 /proc/<PID>/status 的 VmRSS 实测)。

端到端验证:

curl -s http://127.0.0.1:5000/health
{"status":"ok"}
curl -s http://127.0.0.1:5000/languages | jq -r ".[].code" | tr "\n" " "; echo
en zh-Hans fr de ja ko ru es

8 种语言(14 个语言对)与 --load-only 完全一致;对外服务器可用 http://<服务器IP>:5000/ 访问 Web 翻译界面与 API。

八、常见问题(FAQ)

8.1 pip 安装/模型下载极慢或卡住

现象:直连 PyPI 时 pip install libretranslate 超过 10 分钟无进展;argospm update/首次启动的模型下载同样可能卡住。 定位:国际网络到 PyPI 与 Argos 索引(raw.githubusercontent.com / argos-net.com)链路差。 解决:走代理(本文实测可用渠道:http://192.168.1.62:7897):

pip install --proxy http://192.168.1.62:7897 libretranslate   # pip 安装
export http_proxy=http://192.168.1.62:7897 https_proxy=http://192.168.1.62:7897   # 模型下载(requests 库识别该变量)

完全无外网则走第五章离线方案。

8.2 启动时出现 RequestsDependencyWarning

现象:每次启动 CLI 都打印:

/opt/libretranslate/venv/lib/python3.10/site-packages/requests/__init__.py:109: RequestsDependencyWarning: urllib3 (2.8.0) or chardet (7.7.0)/charset_normalizer (3.5.2) doesn't match a supported version!
  warnings.warn(

定位与结论:libretranslate 1.9.6 对 requests/urllib3/chardet 版本区间的声明与最新依赖版本不完全匹配产生的警告,1.9.6 实测不影响任何功能(健康检查、翻译、文件翻译均正常)。可忽略;强迫症可在 venv 内固定旧版依赖消除,但无必要。

8.3 libretranslate --version 报 unrecognized arguments

见 4.3:1.9.6 不支持该参数,用 pip show libretranslate 或 importlib.metadata 查版本。

8.4 设了代理后本机 curl 返回空响应

现象:导出 http_proxy/https_proxy 后,curl http://127.0.0.1:5000/health 返回空(模型下载脚本里轮询就绪时会误判服务未起)。 定位:curl 会把含 127.0.0.1 的请求也交给代理,代理无法回源到本机回环。 解决:本机验证取消代理变量,或显式绕过:

curl -s --noproxy '*' http://127.0.0.1:5000/health
{"status":"ok"}

8.5 --load-only 写了不存在的语言码

实测结论分两种情况:

  • 语言包已装齐(≥2 个)时启动:无效码被静默忽略,服务正常起来(实测 --load-only en,xx 正常监听),无效码只是匹配不到任何语言;
  • 带 --update-models 启动(走模型安装校验路径)时:报错并继续启动:
Updating language models
Found 100 models
Cannot update models (normal if you're offline): Unavailable language codes: xx.
Running on http://0.0.0.0:5008

语言码请用 /languages 端点返回的代码(如 zh-Hans、zh-Hant、en)。

8.6 升级与多版本管理

升级到新版(先看 Release Notes 确认无破坏性变更):

/opt/libretranslate/venv/bin/pip install --proxy http://192.168.1.62:7897 --upgrade libretranslate
systemctl restart libretranslate

语言模型如需同步更新,可带 --update-models 启动一次(更新索引并升级已装语言包),或 --force-update-models 强制重装。多版本共存:再建一个 venv(如 /opt/libretranslate/venv-1.8.4)用 pip install libretranslate==1.8.4 装旧版,systemd 单元里切换 ExecStart 路径即可。

8.7 内存占用评估

实测(8 语言 14 语言对):启动初期约 67MB;空闲常驻约 120MB(VmRSS);翻译发生后按需加载模型内存涨到约 200–260MB。生产按「每并发翻译语言对 × 数百 MB」预估,2GB 内存小机型跑 4–8 个语言对足够。更细的参数(线程/限流/缓存)见配置参数详解篇。

九、卸载与清理

# 停止并注销服务
systemctl stop libretranslate
systemctl disable libretranslate
rm -f /etc/systemd/system/libretranslate.service
systemctl daemon-reload

# 删除应用目录(venv 与日志)
rm -rf /opt/libretranslate

# 删除语言模型与索引(root 用户)
rm -rf ~/.local/share/argos-translate
rm -rf ~/.local/cache/argos-translate

验证无残留:

systemctl list-units --all | grep libretranslate; ls /opt/libretranslate ~/.local/share/argos-translate 2>&1
ls: cannot access '/opt/libretranslate': No such file or directory
ls: cannot access '/root/.local/share/argos-translate': No such file or directory

(systemctl list-units 已无 libretranslate 条目输出。)

十、参考链接