zaLinux.ru

Как создавать виртуальные окружения с любой версией Python (инструкция по использованию Micromamba)

Оглавление

1. Как использовать Python определённой версии в Linux

2. Что такое Miniconda и Micromamba

3. В чём разница между виртуальными окружениями Python (venv, virtualenv) и окружениями Conda (Miniconda / Micromamba)

4. Как установить Micromamba в Linux

4.1 Как установить Micromamba в Debian (Kali Linux, Linux Mint, Ubuntu)

4.2 Как установить Micromamba в Arch Linux (Manjaro, BlackArch)

5. Начало работы с Micromamba — как создать и использовать окружение с определённой версией Python

6. Работа с пакетами в окружении Micromamba

7. Использование pip внутри micromamba

8. Экспорт и воспроизведение окружения

9. Каналы окружения Conda (Miniconda / Micromamba)

10. Запуск команды без активации окружения

11. Очистка кеша

12. Практические советы по использованию Micromamba

13. Ошибки и решение проблем Micromamba

13.1 Ошибка OSError: [Errno 28] No space left on device

13.2 Ошибка error: [Errno 18] Invalid cross-device link

14. Как удалить Micromamba в Linux

14.1 Как удалить Micromamba в Debian (Kali Linux, Linux Mint, Ubuntu)

14.2 Как удалить Micromamba в Arch Linux (Manjaro, BlackArch)


1. Как использовать Python определённой версии в Linux

Если вам нужно быстро и без проблем создать виртуальное окружение с определённой версией Python, то данный мануал покажет как это сделать.

Определённая версия Python может быть зависимостью программного обеспечения, например, модели нейросетей (ИИ) иногда требуют конкретную версию Python. Если быть точнее, то Python указанной версии требуется зависимостями ПО необходимого для запуска нейросети, но сути это не меняет — необходимо получить исполнимые файлы Python той или иной версии.

Не будем рассматривать сложный вариант — компиляция разных версий Python из исходного кода. В этой инструкции будет показано как создать окружения с любой версией Python буквально несколькими командами.

Для этого отлично подходят Miniconda и Micromamba. В данной инструкции мы будем использовать Micromamba.

Смотрите также:

2. Что такое Miniconda и Micromamba

Miniconda и Micromamba — это инструменты для управления окружениями и пакетами (conda-экосистема).

Не смотря на общие буквы в названии, Miniconda и Micromamba это разные программы от разных производителей. На более продвинутом уровне использования эти инструменты имеют различия, но в рамках нужной нам функциональности — создать виртуального окружения Python с выбранной версией Python — эти программы являются аналогами.

Вы можете выбрать любую из них:

  • Miniconda — появилась раньше, написана на Python из-за чего иногда может быть медленнее при разрешении зависимостей, но в показанных в этой инструкции примерах это не будет проявляться
  • Micromamba — более современная альтернатива, написана на C++ и поэтому в некоторых сценариях разрешения зависимостей может быть быстрее, но в базовом использовании как показано в этой статье, это не будет проявляться.

Оба этих пакета отсутствуют в стандартных репозиториях Linux.

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

Данная статья посвящена Micromamba.

Вам необязательно иметь сразу оба инструмента Miniconda и Micromamba — достаточно выбрать один из них. Но при желании вы можете установить их оба — они не конфликтуют друг с другом. Более того, созданное вами окружение Python в одной из этих программ может использоваться (активироваться, например) в том числе и в другой программе.

3. В чём разница между виртуальными окружениями Python (venv, virtualenv) и окружениями Conda (Miniconda / Micromamba)

Прежде чем продолжить, пара слов о том, зачем вообще нужны инструменты Miniconda и Micromamba и почему недостаточно обычных виртуальных окружений Python.

Стандартными инструментами Python можно создавать изолированные виртуальные окружения, например:

python -m venv venv
source venv/bin/activate

В этих окружениях вы можете использовать pip для установки пакетов, которые будут видны только скриптам в этом окружении. Ограничение этого подхода — всё происходит в рамках одной версии Python — текущей системной версии. То есть у вас не получится произвольно выбрать версию Python при создании виртуального окружения. Конечно, есть вариант с компиляцией нужно версии из исходников, но мы рассматриваем более простые случаи использования. В качестве менеджера пакетов используется pip. То есть пакеты, которые можно установить как зависимости, это только только Python пакеты. По умолчанию файлы этих окружений хранятся в той же папке где и созданы (например ./venv).

Что касается виртуальных окружений Conda, то при его создании вы можете выбрать произвольную версию Python — это одна из важнейших их особенностей, которая делает их особенно полезной для запуска приложений зависящих от определённой версии Python. Внутри этого окружения вы можете устанавливать пакеты как с помощью pip, так и менеджерами пакетов conda/mamba. В качестве пакетов и зависимостей для виртуальных окружений conda / mamba могут быть как пакеты Python, так и любые другие (включая C/C++). То есть, например, вы можете установить определённые версии CUDA, PyTorch и других исполнимых файлов в это окружение. В целом эти окружения имеют более полную изоляцию и тяжелее по весу. По умолчанию файлы окружений хранятся более централизованно, но их тоже можно создать в конкретной папке проекта.

4. Как установить Micromamba в Linux

4.1 Как установить Micromamba в Debian (Kali Linux, Linux Mint, Ubuntu)

Выполните следующую команду

"${SHELL}" <(curl -L micro.mamba.pm/install.sh)

Вам будет задано несколько вопросов — можете все настройки оставить по умолчанию, то есть достаточно нажимать Enter.

Micromamba binary folder? [~/.local/bin]
Init shell (zsh)? [Y/n]
Configure conda-forge? [Y/n]
Prefix location? [~/micromamba]

Затем закройте и откройте терминал, чтобы изменения вступили в силу.

После установки, micromamba может быть обновлена командой:

micromamba self-update

4.2 Как установить Micromamba в Arch Linux (Manjaro, BlackArch)

Для установки используйте pikaur:

pikaur -S micromamba-bin

Смотрите также: Автоматическая установка и обновление пакетов AUR

В Arch Linux эта команда установит Micromamba, но по умолчанию не будет модифицирован файл оболочки для автоматической инициализации Micromamba. То есть перед использованием Micromamba (перед созданием или активацией окружения), выполните команду:

eval "$(micromamba shell hook --shell bash)"

Эта команда имеет действие до закрытия терминала. Чтобы не делать это каждый раз, вы можете один раз выполнить следующую команду — она модифицирует файл с настройками оболочки:

micromamba shell init --shell bash --root-prefix=~/.local/share/mamba

5. Начало работы с Micromamba — как создать и использовать окружение с определённой версией Python

Пример создания окружения с Python версии 3.12 (нужно выполнить только один раз):

micromamba create -n myenv python=3.12 -y

Создание окружения с последней версий Python:

micromamba create -n test python -y

Создание окружения с одновременной установкой пакетов в Micromamba — это стандартный способ, он экономит время и избегает лишних пересборок зависимостей. Выше, выбирая версию Python, мы уже фактически создали окружение и сразу же установили Python. Можно указать любое количество пакетов для установки при создании окружения:

micromamba create -n myenv python=3.12 numpy pandas pytorch -c conda-forge -y

Далее пример создания окружения и одновременной установки пакетов с указанием нескольких каналов (важно для ML/ CUDA):

micromamba create -n ml-env python=3.11 pytorch torchvision pytorch-cuda=12.1 -c pytorch -c nvidia -c conda-forge -y

Для активации окружения выполните следующую команду (действует до закрытия терминала или до запуска команды выхода из окружения):

micromamba activate myenv

Проверка:

python --version
which python

Для активации окружений которые находятся не в префиксе micromamba (~/.local/share/mamba), а в conda-префиксе, укажите полный путь до этого окружения, например:

micromamba activate /home/mial/.conda/envs/qwen3-asr

Деактивация окружения:

micromamba deactivate

Для вывода списка окружений:

micromamba env list

Удаление окружения:

micromamba remove -n myenv --all

6. Работа с пакетами в окружении Micromamba

Базовый поиск пакетов

micromamba search cuda

Поиск по каналу

micromamba search -c nvidia cuda

Поиск с фильтрацией по версии:

micromamba search "python=3.12"

Поиск с фильтрацией по имени (частичное совпадение):

micromamba search "*cuda*"

Установка пакетов в уже существующее окружение в активированном окружении

micromamba install numpy scipy

Установка пакетов в уже существующее окружение без его активации (через -n) — это часто удобнее в скриптах:

micromamba install -n myenv numpy scipy

Обновление пакетов в окружении Micromamba — обновить конкретный пакет:

micromamba update numpy

Обновить всё окружение:

micromamba update --all

Удаление пакетов:

micromamba remove numpy

Удаление пакетов с указанием окружения:

micromamba remove -n myenv numpy

Просмотр установленных пакетов

micromamba list

Просмотр установленных пакетов для конкретного окружения:

micromamba list -n myenv

7. Использование pip внутри micromamba

В окружении Conda (Miniconda / Micromamba) вы можете использовать pip как в обычном виртуальном окружении Python.

pip учитывает зависимости и имеет resolver, но работает локально и не пересобирает всё окружение, в отличие от micromamba, который решает задачу глобально. То есть в сложных случаях, а также при установке пакетов требующих компиляции micromamba может помочь решить проблему с зависимостями и консистентностью всего окружения. Поэтому если у вас что-то не получается с pip, то пробуйте установить пакеты с помощью micromamba.

Обычно pip уже предустановлен, но на всякий случай вы можете в этом убедиться:

micromamba install pip

Пример использования pip в окружении Conda (Miniconda / Micromamba):

pip install fastapi uvicorn

8. Экспорт и воспроизведение окружения

Экспорт окружения Conda (Miniconda / Micromamba) (аналог requirements.txt, но лучше):

micromamba env export -n myenv > environment.yml

Создание окружения из файла yml:

micromamba env create -f environment.yml

Что произойдёт:

  • прочитается YAML
  • создастся новое окружение
  • установятся все зависимости

Чтобы узнать где сохранено новое окружение:

micromamba env list

В списке будет присутствовать myenv.

Активация нового окружения — можно сделать в любой папке:

micromamba activate myenv

Важные нюансы

1. Имя окружения берётся из файла:

name: myenv

Для изменения имени окружения:

micromamba env create -n NEW_NAME -f environment.yml

2. Если окружение уже существует

Команда env create не обновляет, а упадёт с ошибкой.

Для обновления существующего окружения:

micromamba env update -n myenv -f environment.yml

3. Часто лучше делать пересоздание окружения “с нуля”. Самый надёжный вариант:

micromamba remove -n myenv --all
micromamba env create -f environment.yml

4. Если в environment.yml есть блок pip:, то перечисленные в нём пакеты автоматически устанавливаются через pip:

- pip:
    - some-package

5. Каналы берутся из:

channels:
  - conda-forge

Если они не указаны, то используются каналы из .condarc.

Клонирование окружения — очень полезно для экспериментов:

micromamba create -n myenv-copy --clone myenv

9. Каналы окружения Conda (Miniconda / Micromamba)

Мы уже несколько раз упоминали каналы, остановимся на них поподробнее.

Канал – это просто репозиторий бинарных пакетов conda (аналог PyPI, но с уже собранными зависимостями).

Примеры:

  • conda-forge – основной community-канал
  • defaults – официальный канал Anaconda
  • pytorch – пакеты PyTorch
  • nvidia – CUDA и GPU-зависимости

Основные каналы, которые реально используются

1. conda-forge (де-факто стандарт)

  • самый большой репозиторий
  • свежие версии
  • хорошая совместимость
  • используется по умолчанию в micromamba

Практика: чаще всего использовать только его.

2. defaults

  • поддерживается Anaconda
  • более консервативные версии
  • иногда несовместим с conda-forge

Обычно:

  • либо defaults
  • либо conda-forge
  • не смешивать без необходимости

3. Специализированные каналы

3.1 pytorch

-c pytorch

Для:

  • PyTorch
  • torchvision
  • torchaudio

3.2 nvidia

-c nvidia

Для:

  • CUDA
  • cuDNN
  • GPU-ускорение

Добавление канала:

micromamba config append channels conda-forge

Посмотреть каналы:

micromamba config get channels

Приоритет каналов влияет на совместимость пакетов — это частая причина “адских” конфликтов.

10. Запуск команды без активации окружения

Запуск команды без активации окружения может быть полезно для скриптов, Cron и других похожих ситуаций:

micromamba run -n myenv python script.py

Или:

micromamba run -n myenv bash

11. Очистка кеша

Если начинаются странные конфликты или для экономии места:

micromamba clean --all

12. Практические советы по использованию Micromamba

1. При установке пакетов с использованием Micromamba, рекомендуется явно указывать канал для ML, иначе будут странные сборки:

-c conda-forge

2. Не нужно без необходимости смешивать каналы — плохой вариант: defaults + random + conda-forge

Хороший вариант: conda-forge (основной) + точечно pytorch / nvidia

3. Не нужно злоупотреблять pip — если пакет есть в conda, то лучше установить его через micromamba.

Минимальный “production-like” сценарий

# создать окружение
micromamba create -n app python=3.12 -c conda-forge -y

# установить зависимости
micromamba install -n app fastapi uvicorn numpy

# добить pip-пакетами
micromamba run -n app pip install some-package

# запуск
micromamba run -n app python main.py

13. Ошибки и решение проблем Micromamba

13.1 Ошибка OSError: [Errno 28] No space left on device

При установке пакета

pip install -U qwen-asr qwen-asr[vllm]

Возникла ошибка:

OSError: [Errno 28] No space left on device

При этом и место на диске, и иноды присутствуют в достаточном количестве.

Смотрите также:

Суть проблемы в том, что в дистрибутивах Linux временная папка нередка размещена не на физическом диске, а в tmpfs (виртуальной файловой системе в оперативной памяти). И эта папка может быть переполнена файлами установочных пакетов, поскольку её размер меньше чем свободное место на диске — отсюда и возникает ошибка о нехватке места.

Смотрите также: Файловая система в оперативной памяти для ускорения работы с файлами и уменьшения нагрузки на диск (tmpfs)

Решение проблемы — сохранять временные файлы не в /tmp (которая размещена в оперативной памяти и которая меньше размера диска), а прямо на диске:

mkdir -p ~/pip-tmp
TMPDIR=~/pip-tmp pip install -U qwen-asr qwen-asr[vllm]

Дополнительно я отключаю кеш, поскольку это иногда вызывает другую ошибку:

TMPDIR=~/pip-tmp pip install --no-cache-dir -U qwen-asr qwen-asr[vllm]

13.2 Ошибка error: [Errno 18] Invalid cross-device link

При установке пакета, например, следующей командой:

pip install -U flash-attn --no-build-isolation

Может возникнуть ошибка:

Raw wheel path /home/mial/.cache/pip/wheels/3d/59/46/f282c12c73dd4bb3c2e3fe199f1a0d0f8cec06df0cccfeee27/tmpj98ktnfb/.tmp-fya5_alf/flash_attn-2.8.3-cp312-cp312-linux_x86_64.whl error: [Errno 18] Invalid cross-device link: 'flash_attn-2.8.3+cu12torch2.9cxx11abiTRUE-cp312-cp312-linux_x86_64.whl' -> '/home/mial/.cache/pip/wheels/3d/59/46/f282c12c73dd4bb3c2e3fe199f1a0d0f8cec06df0cccfeee27/tmpj98ktnfb/.tmp-fya5_alf/flash_attn-2.8.3-cp312-cp312-linux_x86_64.whl' [end of output]

Ключевой строкой в ней является «error: [Errno 18] Invalid cross-device link».

Это ошибка POSIX уровня файловой системы. Она возникает, когда операция rename() (или hardlink) пытается переместить файл между разными файловыми системами (точками монтирования).

pip скачивает или собирает wheel, используя временные директории (обычно /tmp). Затем он перемещает файлы (через rename) либо в cache (~/.cache/pip), либо в целевое окружение. Если эти директории находятся на разных файловых системах, возникает ошибка Invalid cross-device link.

Для решения этой проблемы выберите любой из способов

1) Использование диска для временных файлов:

mkdir -p ~/pip-tmp
TMPDIR=~/pip-tmp pip install -U flash-attn --no-build-isolation

2) Отключить использование кеша в pip:

pip install -U flash-attn --no-cache-dir --no-build-isolation

14. Как удалить Micromamba в Linux

14.1 Как удалить Micromamba в Debian (Kali Linux, Linux Mint, Ubuntu)

В операционной системе Micromamba имеет один исполнимый файл и несколько директорий и файлов с настройками. Чтобы узнать расположение конфигурационных файлов и папок выполните команду

micromamba info

Это покажет вам важную информацию, такую ​​как:

  • envs directories: где хранятся ваши среды
  • package cache: где кешируются загруженные пакеты
  • user config files: расположение вашего файла .mambarc
  • populated config files: расположение вашего файла .condarc
  • root prefix (в последних версиях это называют base environment): базовый каталог для micromamba (обычно указывается как родительский каталог первого каталога envs)

Используйте эти пути, чтобы адаптировать приведённые ниже команды к вашей конкретной установке.

1. Если вы инициализировали свою оболочку с помощью команды

micromamba shell init

то вам необходимо удалить код инициализации из файлов конфигурации оболочки. Выполните следующую команду для каждой инициализированной оболочки:

micromamba shell deinit -s bash    # для bash
micromamba shell deinit -s zsh     # для zsh
micromamba shell deinit -s fish    # для fish
micromamba shell deinit -s xonsh   # для xonsh
micromamba shell deinit -s csh     # для csh/tcsh
micromamba shell deinit -s nu      # для nushell

Это удалит блок инициализации Mamba из файлов конфигурации вашей оболочки (.bashrc, .zshrc, config.fish и т. д.).

2. Расположение исполняемого файла micromamba зависит от способа установки:

Автоматический скрипт установки: исполняемый файл обычно устанавливается в ~/.local/bin/micromamba, для его удаления выполните команду:

rm ~/.local/bin/micromamba

3. Micromamba хранит все среды, пакеты и кеш в определённых каталогах. Выше дана команда как узнать конкретные пути в вашей системе. Если вы использовали настройки и пути по умолчанию, то достаточно выполнить следующую команду для удаления директорий Micromamba:

rm -rf ~/micromamba

Если вы использовали пользовательское расположение (проверьте через micromamba info):

rm -rf /path/to/your/custom/root/prefix

В micromamba info обратите внимание на расположение кеша — он может быть как внутри уже удалённой ~/micromamba, так и в пользовательском расположении — если это так, то удалите его отдельной командой (измените путь до кеша в вашей системе):

Внимание: это приведёт к удалению всех окружений, установленных пакетов и кэшированных данных. Перед удалением этой директории обязательно создайте резервные копии всех важных окружений и данных.

4. В micromamba info найдите информацию о конфигурационных файлах:

  • user config files показывает расположение .mambarc
  • populated config files показывает расположение .condarc

При желании вы можете удалить эти файлы если они существуют, их расположение по умолчанию:

rm ~/.mambarc
rm ~/.condarc

После завершения этих шагов Micromamba будет полностью удалена из вашей операционной системы.

14.2 Как удалить Micromamba в Arch Linux (Manjaro, BlackArch)

Для удаления используйте pikaur:

pikaur -R micromamba-bin

Вы также можете вручную проверить и удалить оставшиеся файлы окружений, кешей и прочего как это показано выше.

Рекомендуемые статьи:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *