Skip to content

Установка на macOS и Linux

This content is not available in your language yet.

На macOS и Linux Mojo ставится как обычный пакет — никакой виртуализации, как на Windows, не требуется. Весь путь занимает минут десять.

Mojo компилирует программы в машинный код, и для финальной сборки ему нужен системный компилятор C — он выполняет линковку.

Окно терминала
sudo apt update && sudo apt install -y build-essential curl

Для Fedora и RHEL:

Окно терминала
sudo dnf install -y gcc curl

Для Arch:

Окно терминала
sudo pacman -S --needed base-devel curl

uv — менеджер пакетов и проектов от Astral, который официальная документация Mojo предлагает как один из двух рекомендованных способов установки.

Окно терминала
curl -LsSf https://astral.sh/uv/install.sh | sh

Перезапустите оболочку, чтобы uv появился в PATH:

Окно терминала
source ~/.bashrc

Проверьте:

Окно терминала
uv --version
  1. Создайте проект:

    Окно терминала
    uv init hello-mojo
    cd hello-mojo
  2. Добавьте Mojo в зависимости:

    Окно терминала
    uv add mojo

    uv создаст виртуальное окружение .venv и скачает в него компилятор и стандартную библиотеку. Первый раз это занимает пару минут — пакет увесистый.

  3. Проверьте установку:

    Окно терминала
    uv run mojo --version

    Должна появиться версия 1.0.0 или новее в пределах ветки 1.x.

Получится такая структура:

  • Directoryhello-mojo
    • Directory.venv/ окружение проекта, внутри компилятор Mojo
    • pyproject.toml зависимости проекта
    • uv.lock точные версии — этот файл коммитят в репозиторий
    • main.py создан uv по умолчанию, можно удалить
hello.mojo
def main():
print("Привет, Mojo!")
Окно терминала
uv run mojo hello.mojo
Результат

Привет, Mojo!

Готово — окружение работает.

Постоянно печатать uv run необязательно. Активируйте окружение один раз за сессию терминала:

Окно терминала
source .venv/bin/activate
mojo hello.mojo

Выйти из окружения — командой deactivate.

В курсе везде используется вариант с uv run: он не зависит от того, активировано окружение или нет, и поэтому воспроизводим у всех читателей.

error: externally-managed-environment
Что это значит

Вы пытаетесь поставить Mojo глобально через системный pip. Современные дистрибутивы Linux и Homebrew на macOS защищают системный Python от таких установок.

Как исправить

Так и должно быть — ставьте в проект: uv init и uv add mojo. Не обходите защиту флагом --break-system-packages: системный Python сломается тихо и не сразу.

mojo: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found
Что это значит

Дистрибутив слишком старый: в нём glibc ниже 2.34. Так бывает на Ubuntu 20.04, Debian 11 и CentOS 7.

Как исправить

Обновите дистрибутив до Ubuntu 22.04 LTS или новее — других вариантов, кроме контейнера с более свежей базой, здесь нет. Проверить текущую версию: ldd --version.

No solution found when resolving dependencies: mojo was not found in the package registry
Что это значит

Платформа не поддерживается: обычно это Mac на Intel или 32-битная система. Пакета под такую архитектуру просто нет.

Как исправить

Проверьте архитектуру: uname -m. Должно быть arm64 на macOS либо x86_64 / aarch64 на Linux. Если это Intel-мак — используйте удалённую машину или Codespaces.

ld: library not found / cc: command not found
Что это значит

Mojo скомпилировал программу, но не смог её слинковать: в системе нет компилятора C.

Как исправить

Вернитесь к шагу 1: на Linux поставьте build-essential (или gcc), на macOS — Command Line Tools через xcode-select --install.

🎯 Проверь себя

Зачем Mojo нужен системный компилятор C, если у него свой компилятор?

Свой компилятор превращает код Mojo в объектный файл, но собрать из объектных файлов исполняемую программу и подключить системные библиотеки должен линковщик — его берут из установленного cc, gcc или clang.

Чем `uv run mojo` отличается от активации окружения и вызова `mojo`?

Ничем по результату. uv run сам подставляет окружение проекта на время одной команды, активация делает то же самое на всю сессию терминала. В курсе используется uv run, потому что он работает одинаково независимо от состояния оболочки.

Нужно ли коммитить в репозиторий файл uv.lock?

Да. Он фиксирует точные версии Mojo и остальных зависимостей — благодаря ему у всех участников проекта собирается один и тот же код. А вот папку .venv коммитить не нужно, ей место в .gitignore.

Окружение готово — настроим редактор, чтобы работали автодополнение, подсказки и отладчик.

Примеры проверены на Mojo 1.0.0

Тексты курса — CC BY-NC-SA 4.0, код примеров — Apache 2.0