zaLinux.ru

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

Оглавление

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

13.3 error: externally-managed-environment

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вам необязательно иметь сразу оба инструмента 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. Как установить Miniconda в Linux

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

Скачайте и запустите установочный скрипт:

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash ~/Miniconda3-latest-Linux-x86_64.sh

Нажмите Enter для показа лицензии.

Для принятия лицензии введите «yes».

Затем нажмите Enter для принятия установочного пути по умолчанию (~/miniconda3).

Затем введите «yes» для внесения изменений в конфигурацию оболочки для инициализации conda при каждом открытии терминала.

Закройте и откройте терминал.

Чтобы не происходила активация conda при каждом открытии терминала (это не то же самое что инициализация), введите:

conda config --set auto_activate_base false

Если что-то пошло не так или для принудительной установки поверх имеющегося пакета, выполните эти команды (добавлена опция -f):

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash ~/Downloads/Miniconda3-latest-MacOSX-x86_64.sh -f

Для обновления Miniconda выполните команду:

conda update conda

Примечание: если вы отказались от автоматической инициализации conda, то в любое время вы можете выполнить инициализацию с помощью команды:

source ~/miniconda3/etc/profile.d/conda.sh

Или с помощью более современных команд, для ZSH:

eval "$(~/miniconda3/bin/conda shell.zsh hook)"

Для Bash:

eval "$(~/miniconda3/bin/conda shell.bash hook)"

Если вы решили включить автоматическую инициализацию, то сначала инициализируйте вручную:

source ~/miniconda3/etc/profile.d/conda.sh

А затем выполните одну из следующих команд (в зависимости от используемой вами оболочки) — ZSH:

conda init zsh

Bash:

conda init bash

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

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

pikaur -S miniconda3

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

Для инициализации Miniconda нужно выполнить:

source /opt/miniconda3/etc/profile.d/conda.sh

Примечание: эту команду нужно выполнять перед каждым использованием команды conda, то есть в том числе перед созданием или активацией окружения. Эффект этой команды сохраняется до закрытия терминала.

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

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

conda create -n myenv python=3.12 -y

В моих тестах на некоторых дистрибутивах Linux в создаваемых окружениях отсутствовал pip, поэтому при создании окружения вы можете явно указать установку pip:

conda create -n myenv python=3.12 pip -y

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

conda create -n test python -y

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

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

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

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

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

conda activate myenv

Проверка:

python --version
which python

Если вы сталкиваетесь с ошибкой «error: externally-managed-environment», то установите в окружение pip следующим образом:

conda install pip

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

conda activate /home/mial/.local/share/mamba/envs/qwen3-asr

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

conda deactivate

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

conda env list

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

conda remove -n myenv --all

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

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

conda search cuda

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

conda search -c nvidia cuda

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

conda search "python=3.12"

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

conda search "*cuda*"

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

conda install numpy scipy

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

conda install -n myenv numpy scipy

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

conda update numpy

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

conda update --all

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

conda remove numpy

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

conda remove -n myenv numpy

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

conda list

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

conda list -n myenv

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

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

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

Разница между pip и conda:

  • pip — разрешает зависимости локально (не учитывает всё окружение)
  • conda — разрешает зависимости глобально (пересобирает зависимости целиком)

Если pip не справляется — лучше использовать conda.

Обычно pip уже предустановлен, но на всякий случай вы можете в этом убедиться (или если вы получаете ошибку «error: externally-managed-environment»):

conda install pip

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

pip install fastapi uvicorn

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

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

conda env export -n myenv > environment.yml

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

conda env create -f environment.yml

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

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

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

conda env list

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

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

conda activate myenv

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

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

name: myenv

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

conda env create -n NEW_NAME -f environment.yml

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

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

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

conda env update -n myenv -f environment.yml

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

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

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

- pip:
    - some-package

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

channels:
  - conda-forge

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

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

conda 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-ускорение

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

conda config --append channels conda-forge

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

conda config --get channels

Приоритет каналов критичен — частая причина конфликтов зависимостей.

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

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

conda run -n myenv python script.py

Или:

conda run -n myenv bash

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

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

conda clean --all

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

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

-c conda-forge

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

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

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

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

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

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

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

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

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

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

13.3 error: externally-managed-environment

Ошибка «error: externally-managed-environment» возникает если использовать pip для установки пакетов на уровне системы, а не виртуальных окружений.

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

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

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

conda install pip

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

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

Удалите настройки оболочки, которые были добавлены для автоматической инициализации Miniconda:

conda init --reverse $SHELL

Затем выполните:

~/miniconda3/uninstall.sh --remove-caches --remove-config-files user --remove-user-data

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

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

pikaur -R miniconda3

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

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

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