跳到主要内容

Libretranslate 搭建教程

· 阅读需 7 分钟
阿狸先森
全栈开发

Libretranslate 嗨 👋 今天是植树节,大家有没有种树。在这个特别的日子里,尽管我们的脚步无法踏足田野,亲手种下一棵绿树,但我们可以在知识的土壤中埋下一颗技术的种子。今天,我们将探讨一个开源项目——LibreTranslate,它是一个自由、开源的翻译服务工具,可以帮助我们搭建属于自己的本地化翻译服务。

接下来,让我们一起学习如何安装和使用 LibreTranslate,为我们的技术森林增添一抹绿色。

希望这篇开篇能为大家带来灵感!🌱

官方文档:Introduction | Libretranslate(libretranslate.org)

Libretranslate是什么?

LibreTranslate 是一个自由、开源的翻译服务工具,它可以帮助我们搭建属于自己的本地化翻译服务。它支持多种语言,并且可以通过 API 进行调用。

搭建环境

官方建议 python 3.8 以上的版本运行。现已 ubuntu 安装python 3.8 版本为列子

1.首先更新包列表:

sudo apt update

2.安装依赖:

sudo apt install software-properties-common

3.添加 deadsnakes PPA 源(包含多个 Python 版本):

sudo add-apt-repository ppa:deadsnakes/ppa

4.再次更新包列表:

sudo apt update

5.安装 Python 3.8:

sudo apt install python3.8

# 查看版本
python3.8 --version

# 将 Python 3.8 设为默认版本:
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1

6.安装 pip:

下载 get-pip.py 脚本:

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

安装 python3.8-distutils:

sudo apt install python3.8-distutils

使用 Python 3.8 运行这个脚本:

python3.8 get-pip.py

验证安装:

python3.8 -m pip --version

安装

LibreTranslate。LibreTranslate 是一个免费的开源机器翻译 API。有几种安装方式,我建议使用 Docker 安装,这样最简单且不会影响系统环境:

  1. 首先确保已安装 Docker,如果没有安装可以运行:
brew install docker

2.拉取并运行 LibreTranslate 容器:

docker run -it -p 5000:5000 libretranslate/libretranslate

这样 LibreTranslate 服务就会在本地的 5000 端口运行。

如果你想通过 pip 安装命令行工具,可以:

pip install libretranslate
# 安装最新版
pip install -U libretranslate

安装完成后,你可以通过以下方式测试是否安装成功

# 启动并加载所有语言
libretranslate

# 更新模型
libretranslate --update-models

# 或者指定特定语言
libretranslate --host 0.0.0.0 --load-only en,zh,vi,ja,ko

ps: 如果你想指定目录安装

mkdir -p /data/translation-services/lib/python3.8/site-packages

pip install --prefix=/data/translation-services -U libretranslate

export PYTHONPATH=/data/translation-services/lib/python3.8/site-packages:$PYTHONPATH

echo 'export PYTHONPATH=/data/translation-services/lib/python3.8/site-packages:$PYTHONPATH' >> ~/.bashrc
source ~/.bashrc

# 首先找到 libretranslate 的安装位置:
find /data/translation-services -name "libretranslate"

# 创建软链接到系统路径:
sudo ln -s /data/translation-services/bin/libretranslate /usr/local/bin/libretranslate

# 如果上面的方法不行,可以直接用 Python 模块方式运行:
python3.8 -m libretranslate --host 0.0.0.0

# 更新模型可以这样:
python3.8 -m libretranslate.download --update-models

#如果还遇到 apt_pkg 错误,需要安装:
sudo apt-get install python3-apt

首次运行会下载预设模型

Updating language models
Found 92 models
ownloading Albanian → English (1.9) ...
Downloading Arabic → English (1.0) ...
Downloading Azerbaijani → English (1.5) ...
Downloading Basque → English (1.9) ...
Downloading Bengali → English (1.9) ...
Downloading Bulgarian → English (1.9) ...
Downloading Catalan → English (1.7) ...
Downloading Chinese (traditional) → English (1.9) ...
Downloading Chinese → English (1.9) ...
Downloading Czech → English (1.9.6) ...
Downloading Danish → English (1.9) ...
Downloading Dutch → English (1.8) ...
Downloading English → Albanian (1.9) ...
Downloading English → Arabic (1.0) ...
...
Loaded support for 46 languages (92 models total)!
Running on http://127.0.0.1:5000

如果你不需要所有语言,可以只下载你需要的语言对(比如只要中英互译)。启动时指定语言:

docker run -it -p 5000:5000 libretranslate/libretranslate --load-only en,zh

测试

curl -X POST "http://localhost:5000/translate" -H "Content-Type: application/json" -d '{"q":"Hello World!","source":"en","target":"zh"}'

外网 怎么访问 5000 端口

libretranslate --host 0.0.0.0
docker run -it -p 0.0.0.0:5000:5000 libretranslate/libretranslate

Libretranslate

扩展

后台运行

要让 LibreTranslate 在后台运行,有几种方法:

  1. 使用 nohup 命令(推荐):
nohup libretranslate --host 0.0.0.0 > libretranslate.log 2>&1 &

这个命令会:

  • 在后台运行服务
  • 将输出重定向到 libretranslate.log 文件
  • 即使终端关闭也会继续运行
  1. 如果想停止服务,可以:
ps aux | grep libretranslate

找到进程 ID 后:

kill <进程ID>
  1. 如果想查看日志:
tail -f libretranslate.log

开机启动

1.首先创建一个服务文件

vim /etc/systemd/system/libretranslate.service

2.在文件中添加以下内容:

[Unit]
Description=LibreTranslate Service
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/libretranslate --host 0.0.0.0 --char-limit 200
Restart=always
User=root

[Install]
WantedBy=multi-user.target


# 如果改了安装路径
[Unit]
Description=LibreTranslate Service
After=network.target

[Service]
Type=simple
ExecStart=/data/translation-services/bin/libretranslate --host 0.0.0.0 --char-limit 200
Environment=PYTHONPATH=/data/translation-services/lib/python3.8/site-packages
Restart=always
User=root

[Install]
WantedBy=multi-user.target

3.然后执行以下命令启用并启动服务:

# 停止当前服务
sudo systemctl stop libretranslate

# 重新加载 systemd 配置
sudo systemctl daemon-reload

# 启用服务(设置开机自启)
sudo systemctl enable libretranslate

# 启动服务
sudo systemctl start libretranslate

# 检查服务状态:
sudo systemctl status libretranslate

# 如果你想查看日志:
journalctl -u libretranslate -f

限制字数

对于 LibreTranslate,你可以在请求时通过参数限制输入文本的长度。这里有几种实现方式:

  1. 在 API 调用时限制:
def translate_text(text, max_length=500):
# 截断文本
if len(text) > max_length:
text = text[:max_length]

url = "http://localhost:5000/translate"
payload = {
"q": text,
"source": "en",
"target": "zh"
}

response = requests.post(url, json=payload)
return response.json()
  1. 如果你是在启动服务时限制,可以使用 --char-limit 参数:
libretranslate --host 0.0.0.0 --char-limit 1000

这样会限制每次请求的最大字符数为 1000。

缓存策略

Node.js 实现带缓存的翻译服务。这里使用 Redis 作为缓存存储

const Redis = require('ioredis');
const crypto = require('crypto');
const axios = require('axios');

class TranslationCache {
constructor() {
this.redis = new Redis({
host: 'localhost',
port: 6379
});
this.CACHE_EXPIRE = 7 * 24 * 60 * 60; // 一周的秒数
}

getCacheKey(text, sourceLang, targetLang) {
const content = `${text}:${sourceLang}->${targetLang}`;
return crypto.createHash('md5').update(content).digest('hex');
}

async getTranslation(text, sourceLang, targetLang) {
const cacheKey = this.getCacheKey(text, sourceLang, targetLang);

try {
// 检查缓存
const cachedResult = await this.redis.get(cacheKey);
if (cachedResult) {
return JSON.parse(cachedResult);
}

// 如果没有缓存,调用翻译 API
const response = await axios.post('http://localhost:5000/translate', {
q: text,
source: sourceLang,
target: targetLang
});

const result = {
text,
languagePair: `${sourceLang}->${targetLang}`,
translation: response.data.translatedText,
timestamp: new Date().toISOString()
};

// 存入缓存
await this.redis.setex(cacheKey, this.CACHE_EXPIRE, JSON.stringify(result));
return result;

} catch (error) {
console.error('Translation error:', error);
throw error;
}
}
}

// 使用示例
async function translate() {
const translator = new TranslationCache();
try {
const result = await translator.getTranslation('Hello World', 'en', 'zh');
console.log(result);
} catch (error) {
console.error(error);
}
}

module.exports = TranslationCache;

去除警告

如果在安装过程中遇到以下警告,可以试尝试下面的方法。当然不去除广告也没事

WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

这个警告提示是关于以 root 用户身份运行 pip 可能带来的潜在问题。建议使用虚拟环境来安装 Python 包,这样更安全且不会影响系统环境。

1.让我们创建并使用虚拟环境:

python3 -m venv myenv

2.激活虚拟环境:

source myenv/bin/activate

激活后,你会看到命令行提示符前面出现 (myenv) ,这表示你已经在虚拟环境中了。 3.现在你可以安装需要的包:

pip install libretranslate

使用完虚拟环境后,可以通过以下命令退出:

deactivate

用虚拟环境的好处:

  • 避免权限问题

  • 不会影响系统的 Python 环境

  • 可以为不同项目创建独立的环境

  • 便于管理依赖包

  • 避免包版本冲突 如果你还想继续以 root 用户运行(不推荐),可以添加 --no-warn-script-location 参数来抑制警告:

    pip install --no-warn-script-location libretranslate