Понадобилось переводить офлайн. Устанавливать программу для Windows через wine желания не было. Решением стала программа Argos Transllate. Она написана на Python, работает в терминале, и есть графический интерфейс пользователя. Об опыте установки и использования этой программы и будет написано ниже.
Установка: ничто не предвещало беды
Автор предлагает устанавливать программу так: $ pip install argostranslate
. Доверимся автору и попробуем:
$ pip install argostranslate
Команда «pip» не найдена, но может быть установлена с помощью:
sudo apt install python3-pip
Обычное дело, не хватает нужной программы, установим её:
$ sudo apt install python3-pip
Следующие НОВЫЕ пакеты будут установлены:
binutils binutils-common binutils-x86-64-linux-gnu build-essential bzip2 dpkg-dev
fakeroot g++ g++-13 g++-13-x86-64-linux-gnu g++-x86-64-linux-gnu gcc gcc-13
gcc-13-x86-64-linux-gnu gcc-x86-64-linux-gnu javascript-common
libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan8
libbinutils libc-dev-bin libc-devtools libc6-dev libcc1-0 libcrypt-dev
libctf-nobfd0 libctf0 libdpkg-perl libexpat1-dev libfakeroot
libfile-fcntllock-perl libgcc-13-dev libgprofng0 libhwasan0 libitm1 libjs-jquery
libjs-sphinxdoc libjs-underscore liblsan0 libpython3-dev libpython3.12-dev
libquadmath0 libsframe1 libstdc++-13-dev libtsan2 libubsan1 linux-libc-dev
lto-disabled-list make manpages-dev patch python3-dev python3-pip
python3-setuptools python3-wheel python3.12-dev rpcsvc-proto zlib1g-dev
Чёт многовато всего устанавливается, добавим опцию --no-install-recommends
:
$ sudo apt install python3-pip --no-install-recommends
Следующие НОВЫЕ пакеты будут установлены:
python3-pip python3-setuptools python3-wheel
Отлично, установили pip
, теперь можно вернутся к $ pip install argos-translate
, пробуем и получаем ошибку:
error: externally-managed-environment
If you wish to install a non-Debian packaged Python application,
it may be easiest to use pipx install xyz, which will manage a
virtual environment for you. Make sure you have pipx installed.
Ну ооокей, установим pipx
который which will manage a virtual environment for you
, делаем:
$ sudo apt install pipx
Следующие НОВЫЕ пакеты будут установлены:
pipx python3-argcomplete python3-packaging python3-pip-whl python3-platformdirs
python3-psutil python3-setuptools-whl python3-userpath python3-venv
python3.12-venv
Готово. Теперь пробуем установить argos-translate. Это который раз? Третий, кажется ;-)
$ pipx install argos-translate
installed package argostranslate 1.9.6, installed using Python 3.12.3
These apps are now globally available
- argos-translate
- argospm
⚠️ Note: '/home/ivanov/.local/bin' is not on your PATH environment variable.
These apps will not be globally accessible until your PATH is updated. Run
`pipx ensurepath` to automatically add it, or manually modify your PATH in your
shell's config file (i.e. ~/.bashrc).
done! ✨ 🌟 ✨
Ничего не предвещало беды, но что то оно долго устанавливалось… Ну прям долго. Это на нормальном ПК и скорости подключения 100 Мбит/с. Что же оно такое качало? Что же оно устанавливало? И сколько это все занимает места на диске? Давайте посмотрим:
du -sh .cache/pip ./.local/share/pipx/venvs/argostranslate
2,9G .cache/pip
5,3G ./.local/share/pipx/venvs/argostranslate
АААА! Ух тыыы! Какая красотааа! Удивлению моему не было предела. И это при том, что корень без /home
использует диск на 8,2Gib. То есть один переводчик использует столько же места на диске, как и сама система, прикольно :-)
Ради интереса проверим, работает ли оно:
$ pipx ensurepath #Добавим путь .local/bin в переменную $PATH. Закрываем окно терминала и открываем новое.
Запускаем:
$ argos-translate --from-lang en --to-lang ru "hello"
usage: argos-translate [-h] [--from-lang FROM_LANG] [--to-lang TO_LANG] [TEXT]
argos-translate: error: 'en' is not an installed language.
Нет, не работает. Не установлена поддержка языка. И это при скачанных восьми гигабайтах… Хорошо, установим поддержку языка:
$ ./.local/bin/argospm install translate-en_ru
Скачалось и установилось быстро. Проверяем работу:
$ argos-translate --from-lang en --to-lang ru "hello"
/home/ivanov/.local/share/pipx/venvs/argostranslate/lib/python3.12/site-packages/stanza/models/tokenize/trainer.py:85: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.
checkpoint = torch.load(filename, lambda storage, loc: storage)
привет
Предупреждение больше, чем перевод… На этом моменте хочется удалить программу, всё что она скачала, и пойти искать другое решение. Однако я решил попробовать другой способ установки, также описанный автором программы.
Установка, способ второй: 8Gib дискового пространства снова на воле
Удалим всё то, что пришло и «скромно» заняло место на диске:
$ rm -rf ./.cache/pip ./.cache/pipx ./.local/share/pipx ./.local/bin/argos* ./.local/share/argos-translate/ ./.local/cache/argos-translate
$ sudo apt purge pip pipx -y && sudo apt autopurge -y
# Не забудьте удалить .local/bin путь из переменной $PATH, отредактировав для этого ваши .profile .bashrc .bash_profile
Устанавливаем другим способом. Нам понадобится git, чтобы клонировать репозиторий программы:
$ sudo apt install git
Клонируем репозиторий:
$ git clone https://github.com/argosopentech/argos-translate.git
Получение объектов: 100% (3862/3862), 3.75 МиБ
Теперь, перейдем в скачанный репозиторий и создадим в нем виртуальное окружение:
$ cd argos-translate
$ sudo apt install python3-virtualenv --no-install-recommends
$ virtualenv env
Отлично, активируем созданное окружение и установим всё необходимое:
$ source ~/argos-translate/env/bin/activate
$ pip install -e .
Установилось быстро, места на диске употребило 600Mib. Многовато, но не 8Gib как было.
Теперь установим поддержку нужного перевода и сделаем тест:
$ argospm install translate-en_ru
$ argos-translate -f en -t ru "Argos Translate uses OpenNMT for translations and can be used as either a Python library, command-line, or GUI application. "
Argos Translate использует OpenNMT для переводов и может использоваться как библиотека Python, командная строка или приложение GUI.
It’s finally over! Мог бы подумать пользователь, но нет. Оказалось, что программа медленно переводит текст, не важно какой он величины. Программа каждый раз загружает себя в ОЗУ, выполняет работу, и? И выгружается из ОЗУ. Оно и понятно, зачем ей быть постоянно загруженной? Однако когда переводы один за другим, хочется скорости, чтобы программа не выгружалась.
Для этого есть скрипт. Создадим его $ touch ~/argos-translate/env/bin/argos-fast && chmod u+x ~/argos-translate/env/bin/argos-fast
и укажем содержимое:
#!/usr/bin/env python3
# argos repl
# reduce translation time
# from (13 + 8 + 2) = 23 seconds to 2 seconds
# https://github.com/argosopentech/argos-translate
src_lang = "en"
dst_lang = "ru"
import time
# If the readline module was loaded, then input() will use it
# to provide elaborate line editing and history features.
import readline
# 13 seconds
print("importing argostranslate... ", end="")
t1 = time.time()
import argostranslate.translate
t2 = time.time()
print(f"done in {(t2 - t1):.1f} seconds")
# hide warnings: "Language %s package %s expects mwt, which has been added"
import logging
logging.getLogger("stanza").disabled = True
prompt_format = "{}: "
src_prompt = prompt_format.format(src_lang)
dst_prompt = prompt_format.format(dst_lang)
# load the language model
# 8 seconds
print("loading the language model... ", end="")
t1 = time.time()
argostranslate.translate.translate("hello", src_lang, dst_lang)
t2 = time.time()
print(f"done in {(t2 - t1):.1f} seconds")
print()
while True:
try:
src = input(src_prompt)
except (EOFError, KeyboardInterrupt):
break
# translate
# 2 seconds
t1 = time.time()
dst = argostranslate.translate.translate(src, src_lang, dst_lang)
dt = time.time() - t1
print(dst_prompt + dst + "\n")
#print(dst_prompt + dst + "\n" + f"dt = {dt}\n") # debug: print time
Запускаем скрипт и видим приглашение к переводам:
$ argos-fast
importing argostranslate... done in 9.6 seconds
loading the language model... done in 8.1 seconds
en: Hello my wife
ru: Привет моей жене
en:
Установка графического пользовательского интерфейса
Если вам нужен графический пользовательский интерфейс, установите его:
$ pip install argostranslategui #Замечание! ГПИ устанавливать ТОЛЬКО после установки консольного argostranslate, иначе он скачает 8Gib ;-)
Выглядит ГПИ так. Шрифт мелкий, на системные настройки не реагирует. Его можно увеличить из gnome-tweaks увеличением scaling-factor, что не приемлемо для меня. Но возможно, кому то подойдет.
Как запускать?
Чтобы запустить программу нужно активировать окружение: $ source argos-translate/env/bin/activate
, тогда будут доступны argos-translate, argos-translate-gui, argos-fast
.
Деактивируется окружение командой $ deactivate
.
Опыт использования
Переводит программа хорошо и быстро. Но не любит переносов строки, например если скопировать абзац за раз из PDF, то переведет плохо. Если скопировать тот же абзац но по одной строке, переведет отлично.
Если использовать скрипт argos-fast
или ГПИ, то оперативной памяти программа употребит 700-800Mib. Если использовать просто программу, то потребление озу будет пиком, то есть употребит 800Mib,перевод выполнит, и сбросит.
Надеюсь эта краткая заметка будет полезна тем, кому нужен нативный офлайн-переводчик для Linux :-). Спасибо за внимание и чтение.