Сначала определите слой сбоя — архитектура, Shell, зависимости или нативные библиотеки; повторная установка Miniforge без этой проверки часто только добавляет конфликтующие каталоги и PATH.

Если локальная среда уже загрязнена или в лаборатории нет стабильного Mac, соберите чистое окружение на удалённом Apple Silicon Mac, проверьте реальный научный сценарий и только затем переносите проект.

Эта инструкция предназначена для:

  • студентов и аспирантов, которые впервые настраивают Python на macOS;
  • исследователей, переносящих проект с Intel, Windows или Linux на Apple Silicon;
  • технических специалистов лабораторий, отвечающих за воспроизводимую conda-среду.

Карта диагностики Miniforge

Сбой установки Miniforge на Apple Silicon начинается не с удаления каталогов, а с классификации наблюдаемого симптома. Разделите проблему на четыре слоя:

  • установщик завершается с ошибкой или не создаёт каталог;
  • установка завершена, но терминал не знает команду conda;
  • conda запускается, но решатель не находит пакет или не может согласовать зависимости;
  • пакет устанавливается, однако Python, динамическая библиотека или JupyterLab не могут его импортировать.

Для каждого слоя сохраните вывод диагностики до исправления. Это позволяет сравнить исходное состояние с результатом и не потерять причину сбоя.

Начните с минимального набора:

uname -m
which conda
conda info
conda env list
python -c 'import platform, sys; print(platform.machine()); print(sys.executable)'

Сохраните также точный текст ошибки установщика, имя скачанного файла и путь, куда предполагалась установка. Если команда отсутствует, ошибка which conda сама по себе является полезным результатом — не нужно сразу повторно запускать установщик.

Остановитесь и не меняйте систему, если:

  • вы ещё не записали архитектуру Mac и имя установочного файла;
  • в conda env list видны несколько исторических каталогов, назначение которых неизвестно;
  • ошибка содержит конфликт библиотек, но вы не знаете, какой Python запускается;
  • проект уже работает в одном окружении и проблема касается только JupyterLab.

Такой порядок особенно важен для лаборатории. Удаление всей среды может уничтожить локальные настройки, список пакетов и путь к данным, не устранив исходную причину.

Архитектура установщика и каталогов

Для Apple Silicon нужен нативный вариант arm64, соответствующий платформе osx-arm64. Проверяйте не только название компьютера, но и фактический результат uname -m. Установочный файл должен соответствовать этой архитектуре. Название файла и каталог установки сохраните в журнале проекта.

Официальные инструкции и актуальные имена установщиков находятся в README Miniforge и на странице последнего релиза Miniforge. Команду установки берите именно оттуда. Не подменяйте её скриптом из случайного репозитория и не принимайте поведение сторонней перепаковки за официально поддерживаемый сценарий.

Типичная ошибка выглядит так: на Mac с Apple Silicon запускается установщик x86_64, после чего часть инструментов работает через слой совместимости, а часть пакетов ожидает arm64. В другом варианте нативный Miniforge установлен правильно, но в PATH остался старый каталог от Intel-среды. Внешне обе ситуации могут проявляться как «conda не работает», однако исправляются по-разному.

Проверьте три соответствия:

  • архитектура оборудования — результат uname -m;
  • архитектура установщика — имя файла из официального релиза;
  • архитектура пакетов — канал и сборки osx-arm64, которые видит conda.

Если необходимо запускать старое приложение x86_64, наличие Rosetta не превращает все научные пакеты в нативные. Документация Apple о Rosetta объясняет её роль как слоя запуска приложений Intel. Это отдельный режим, а не доказательство совместимости конкретного Python-пакета.

Проверьте фактические пути:

type -a conda
type -a python
conda info --base

Если type -a conda показывает несколько мест, не удаляйте их вслепую. Выпишите пути, определите, какой из них должен остаться, а затем временно открывайте новый терминал для каждой проверки. Файл установщика также не следует запускать повторно, пока не ясно, куда попадёт новая копия.

Как выбрать arm64 или x86_64 для Apple Silicon?

Для нового научного окружения выбирайте arm64, если нужный пакет имеет сборку osx-arm64 и проект не требует Intel-зависимости. x86_64 оправдан только при подтверждённой необходимости в старом бинарном компоненте. Сначала проверьте документацию пакета и минимальный импорт, а не ориентируйтесь на то, что одна команда уже выполнилась.

Shell, PATH и повторные установки

Если после установки появляется command not found: conda, проблема часто находится в инициализации Shell, а не в самом Miniforge. На macOS проверьте, какой Shell запущен:

echo $SHELL
echo $PATH

Затем найдите строки инициализации conda в конфигурации zsh:

grep -n "conda" ~/.zshrc

Команда только читает файл. Перед исправлением сделайте резервную копию:

cp ~/.zshrc ~/.zshrc.backup

Не заменяйте весь ~/.zshrc готовым шаблоном. В нём могут находиться настройки SSH, научных инструментов, прокси или локальных переменных проекта. Удалять следует только явно устаревший блок и только после фиксации его содержимого.

Если базовый путь известен из conda info --base, запустите инициализацию для текущего Shell:

conda init zsh

После этого закройте текущую сессию и откройте новую. Повторите which conda, conda info и проверку Python. Если команда снова исчезает после перезапуска, проверьте:

  • не используется ли другой конфигурационный файл;
  • нет ли более раннего пути к старой conda-среде;
  • не запускается ли терминал в режиме, отличном от обычного zsh;
  • не добавляет ли лабораторный профиль собственный PATH поверх пользовательского.

Как восстановить активацию conda в терминале macOS?

Сначала подтвердите, что бинарный файл conda существует и запускается по абсолютному пути. Затем проверьте резервную копию ~/.zshrc, активируйте инициализацию только для нужного Shell и откройте новую сессию. Если базовая среда автоматически активируется и ломает проект, не удаляйте Miniforge: сначала отключите автоматическую активацию и работайте в отдельном окружении.

Официальная документация conda по управлению окружениями рекомендует разделять среды по задачам. Для исследовательского проекта это важнее, чем постоянное обновление base: ошибка в одном анализе не должна менять интерпретатор другого проекта.

Каналы conda-forge и решение зависимостей

Когда conda запускается, следующий слой — пакетный решатель. Ошибка «пакет не найден» не всегда означает поломку Miniforge. Возможны разные причины:

  • канал настроен неправильно или перекрывается приоритетами;
  • для osx-arm64 нет подходящей сборки;
  • версии пакетов требуют несовместимые зависимости;
  • сеть не позволяет скачать метаданные или архив;
  • в команду перенесены ограничения от среды x86_64.

Сначала сохраните конфигурацию:

conda config --show-sources
conda config --show channels
conda info

Затем проверьте проблему в новом окружении, а не в base. Не добавляйте десятки пакетов одновременно. Начните с Python и одного ключевого компонента проекта. Если минимальная среда создаётся, добавляйте остальные зависимости по группам и записывайте команду, на которой возник конфликт.

conda-forge — это канал пакетов, а не гарантия, что каждый научный инструмент уже собран для osx-arm64. Важно различать:

  • отсутствие конкретной сборки для архитектуры;
  • невозможность согласовать версии;
  • ошибку загрузки;
  • ошибку уже после установки.

Такое различие экономит время. Если пакет отсутствует именно для osx-arm64, повторная очистка кэша не создаст нужную сборку. Если проблема сетевого доступа, смена Python-версии может только замаскировать исходную причину.

Внимание: успешное решение зависимостей означает лишь то, что conda смогла собрать набор пакетов. Это ещё не доказывает, что научный код импортирует нативные библиотеки и выдаёт корректный результат.

Проверяйте архитектуру и источники внутри нового окружения:

conda create -n research-check python
conda activate research-check
python -c 'import platform, sys; print(platform.machine()); print(sys.executable)'
conda list

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

Python, нативные библиотеки и JupyterLab

Самая обманчивая ситуация — пакет отображается в conda list, но import завершается ошибкой. Причины могут быть в динамической библиотеке, смешении pip и conda-пакетов, неправильной архитектуре или запуске другого Python.

Проверьте интерпретатор из активированного окружения:

which python
python -c 'import sys; print(sys.executable)'
which jupyter
jupyter --paths

Пути python и jupyter должны относиться к одной среде. Если терминал использует правильный Python, а Notebook показывает другую среду, установите JupyterLab в проверенное окружение и зарегистрируйте именно его. Способ установки сверяйте с официальным руководством JupyterLab, а не с копией команды из старого проекта.

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

  • интерпретатор, которым установлен пакет;
  • ядро, выбранное в интерфейсе JupyterLab;
  • архитектура нативных библиотек, загружаемых этим Python.

Сделайте минимальный тест импорта:

python -c 'import sys; print(sys.version); import platform; print(platform.platform())'

Затем добавьте импорт главного пакета проекта. Не проверяйте только запуск интерфейса. Для биоинформатики это может быть чтение небольшого тестового файла; для анализа сигналов — обработка короткого фрагмента; для статистического проекта — расчёт на фиксированном наборе данных. Сам пример должен быть связан с вашей задачей и давать проверяемый результат.

Если терминал выполняет код, а JupyterLab выдаёт ошибку, сохраните:

jupyter kernelspec list

После этого выберите ядро, созданное из нужного окружения. Не меняйте системный Python и не удаляйте рабочую среду до того, как подтвердили, какой kernel использует Notebook.

Чистая среда и воспроизводимая передача

Пересборка оправдана, когда у вас накопились несколько установок conda, проект переносился между Intel и Apple Silicon, а исходные пути неизвестны. Она также нужна, если лаборатория не располагает стабильным Mac для повторной проверки. В таком случае создайте изолированное окружение на чистом Apple Silicon Mac и рассматривайте его как контрольную точку.

Для сохранения спецификации используйте экспорт:

conda env export --from-history > environment.yml

Файл environment.yml содержит не каждый транзитивный пакет, а явные зависимости, заданные пользователем. Это удобнее для переноса между машинами, но не гарантирует идентичный результат при изменении доступных сборок. Для строгого внутреннего аудита отдельно сохраните полный вывод conda list.

На чистой машине проверьте восстановление:

conda env create -f environment.yml
conda activate research-check

Если имя окружения зафиксировано в файле, активируйте его фактическим именем из вывода conda. После создания повторите импорт и реальный пример. Сравнивайте не только успешный запуск, но и ключевой результат: размер выходного файла, число обработанных записей, контрольную сумму или другое измерение, принятое в вашей лаборатории.

Перед передачей окружения отметьте:

  • архитектуру исходного и целевого Mac;
  • каналы conda и ограничения версий;
  • команду активации;
  • путь к данным, который нельзя включать в публичный файл;
  • результат минимального научного теста;
  • дату создания environment.yml.

Приёмочная проверка

Используйте этот список после исправления:

  • [ ] uname -m соответствует выбранному установщику.
  • [ ] type -a conda не показывает случайный старый путь первым.
  • [ ] резервная копия ~/.zshrc создана до изменения инициализации.
  • [ ] conda info показывает ожидаемый базовый путь.
  • [ ] окружение проекта создаётся отдельно от base.
  • [ ] python и jupyter указывают на одну среду.
  • [ ] ключевой пакет импортируется из активного окружения.
  • [ ] минимальный пример проекта выполняется на тестовых данных.
  • [ ] environment.yml создаёт среду на чистом Apple Silicon Mac.
  • [ ] сохранены исходные ошибки и итоговые команды.

Остановитесь на этапе диагностики, если нативный пакет доступен только в x86_64, а проект не допускает слой совместимости. В этом случае сначала решите вопрос поддержки архитектуры с авторами пакета. Не переводите всю лабораторную среду в смешанный режим только ради одной не подтверждённой зависимости.

Когда нужен удалённый Mac

Локальная Windows- или Linux-среда удобна для основной обработки, но она не заменяет проверку macOS. У неё есть три реальных ограничения: другой набор системных библиотек, отличающаяся архитектура нативных зависимостей и отсутствие возможности воспроизвести ошибки именно macOS Shell. Виртуальная машина дополнительно зависит от поддержки гостевой архитектуры и доступных прав, а общий лабораторный Mac создаёт конфликт версий и настроек.

Если проблема неясна после проверки четырёх слоёв, чистый удалённый Apple Silicon Mac даёт контрольный эксперимент. Подключитесь по разрешённому лабораторному каналу, создайте отдельное окружение, установите только зависимости проекта и сохраните журнал команд. Для работы через удалённую сессию заранее определите, где будут храниться исходники, результаты и секреты. Не оставляйте единственную копию данных на временном окружении.

Для задач, где нужен именно macOS, можно рассмотреть удалённый Mac для исследовательской среды. Это не отменяет проверку пакетов: аренда помогает получить чистую контрольную машину, но не исправляет пакет, для которого нет сборки osx-arm64.

Если контрольная среда работает, а локальная — нет, причина почти наверняка в локальной истории: PATH, старом kernel, смешанных архитектурах или конфигурации Shell. Если не работает и чистая среда, переносить проблему на другой компьютер бессмысленно — исследуйте пакет, канал или ограничение проекта.

Итоговое решение

Для краткой проверки гипотез Windows или Linux часто остаются удобнее: на них уже настроены лабораторные скрипты, привычны серверные пути и доступны существующие HPC-ресурсы. Но как постоянное решение для macOS-специфичного проекта они имеют недостатки: нельзя подтвердить поведение macOS-библиотек, архитектура нативных компонентов отличается, а виртуализация и общий лабораторный компьютер добавляют ограничения доступа и конфигурационные конфликты.

Если после разбора Miniforge вы всё ещё не знаете, проблема в проекте или в загрязнённой локальной среде, разумнее сначала проверить её на чистом удалённом Apple Silicon Mac. После успешного импорта, запуска реального примера и повторного создания environment.yml вы сможете решить, переносить ли окружение на свой компьютер или оставить удалённую среду на период исследования. Для такого сценария можно начать с варианта аренды Mac для научных задач, не покупая отдельное устройство до подтверждения совместимости.