Start / Poradniki / Rozwiązywanie problemów / Apple
macOS
Autor: Jakub Rusinowski · Ostatnia aktualizacja: 1 września 2026
Edukator AI i prowadzący warsztaty z wdrażania lokalnych modeli LLM
ERROR: Could not find a version that satisfies the requirement mlx (from versions: none)
ERROR: No matching distribution found for mlx
| Jeśli widzisz | Przyczyną jest | Przejdź do |
|---|---|---|
platform.processor() wypisuje i386 na Macu z serii M | Uruchamiasz Pythona x86 pod Rosettą 2 | Rozwiązanie 2: znajdź i podmień tego Pythona |
| „No matching distribution found for mlx” | Żaden wheel arm64 nie pasuje do nienatywnego interpretera | Rozwiązanie 1: najpierw sprawdź procesor |
| Zainstalował się i działa mniej więcej z prędkością CPU | Interpreter jest natywny, ale coś innego jest nie tak — albo MLX nie jest tu właściwym narzędziem | Rozwiązanie 5: potwierdź użycie GPU, potem rozwiązanie 6 |
which -a python3 pokazuje /usr/local/bin przed /opt/homebrew/bin | Intelowa instalacja Homebrew przesłania tę dla arm64 | Rozwiązanie 2: /usr/local to Intel, /opt/homebrew to arm |
| Budowanie ze źródeł wywraca się na CMake albo na SDK | Same Command Line Tools nie wystarczają do budowania ze źródeł | Rozwiązanie 4: pełny Xcode, SDK 14+, CMake 3.25+ |
Dwa różne objawy z jedną wspólną przyczyną. Albo pip stanowczo odmawia znalezienia pakietu, który na pewno istnieje, albo instaluje się czysto i nie dowozi ani odrobiny prędkości, którą MLX ma zapewniać.
pip install mlx zgłasza brak pasującej dystrybucji.MLX wymaga macOS 14.0 lub nowszego, Apple Silicon oraz natywnego Pythona arm64 w wersji 3.10 albo wyższej. Publikuje wyłącznie wheele arm64, bo jest frameworkiem opartym na Metalu i nie ma sensownego powodu, by dostarczać cokolwiek dla x86. Jeśli twój interpreter to build x86 działający pod Rosettą 2, pip słusznie zgłasza, że żadna dystrybucja nie pasuje — komunikat jest prawdziwy, tylko nie mówi dlaczego. Cała diagnoza to jedno polecenie: platform.processor() musi wypisać arm. Na Macu z serii M wypisuje i386, gdy interpreter jest x86 pod Rosettą, a ten jeden fakt tłumaczy zarówno nieudaną instalację, jak i — w mieszanych środowiskach — rozczarowanie wydajnością.
Jedno polecenie mówi ci, czy masz ten problem. Musi wypisać arm. Jeśli na Macu z serii M wypisuje i386, twój Python to build x86 działający pod Rosettą 2 i wszystko inne z tego wynika. Nic poniżej nie ma sensu, dopóki to nie wypisze arm.
# zsh
python3 -c "import platform; print(platform.processor())"
# arm -> native, good
# i386 -> x86 Python under Rosetta, this is your problem
uname -m # arm64 on Apple Silicon
sw_vers # MLX needs macOS >= 14.0
python3 --version # MLX needs >= 3.10arm, uname -m wypisuje arm64, macOS jest w wersji 14 lub nowszej, a Python w 3.10 lub nowszej. Wszystkie cztery warunki muszą być spełnione.python3 -c "import platform; print(platform.processor())"Na maszynie zwykle jest więcej niż jeden interpreter, a ten niewłaściwy stoi pierwszy w twoim PATH. which -a python3 wypisuje je wszystkie po kolei, a file podaje architekturę każdego pliku binarnego wprost. Sama lokalizacja jest już mocną wskazówką: /opt/homebrew to prefiks Homebrew dla arm64, a /usr/local — ten intelowy — więc python3 rozwiązujący się w /usr/local na Macu z serii M jest niemal na pewno winowajcą.
# zsh — every python3 on PATH, in order
which -a python3
# What architecture is the one you are getting?
file $(which python3)
# ... Mach-O 64-bit executable arm64 <- good
# ... Mach-O 64-bit executable x86_64 <- the problem
# Is your shell itself running under Rosetta?
archfile zgłasza arm64 dla interpretera, którego naprawdę używasz, a arch wypisuje arm64 dla powłoki.file $(which python3) && archUstawienie, o którym łatwo zapomnieć i którego nie sposób odgadnąć: w Finderze zaznacz Terminal albo iTerm w /Applications/Utilities, naciśnij Command-I i sprawdź, czy zaznaczone jest „Otwórz przy użyciu Rosetty”. Jeśli tak, każdy proces uruchomiony przez terminal jest x86 — łącznie z Pythonem, który uruchomiony w dowolny inny sposób jest zupełnie natywny. Odznacz, zamknij terminal całkowicie i otwórz ponownie. Ludzie ustawiają to raz dla jakiegoś starego narzędzia i zapominają na lata.
# zsh — if this prints i386, the shell itself is under Rosetta
arch
sysctl -n sysctl.proc_translated # 1 = running translatedarch wypisuje arm64, a sysctl.proc_translated — 0.arch; sysctl -n sysctl.proc_translatedNatywnego interpretera weź z jednego z trzech miejsc: instalatora universal2 z python.org, Homebrew w /opt/homebrew albo miniforge, które jest budowane pod arm64 i jest najprostszą drogą, gdy korzystasz z condy. Potem utwórz środowisko wirtualne od nowa, zamiast używać starego — istniejący venv zapamiętuje interpreter, który go stworzył, i będzie dalej używał tego x86, niezależnie od tego, jakiego Pythona zainstalowałeś od tamtej pory. To ten krok, który ludzie pomijają, i przez niego rozwiązanie sprawia wrażenie niedziałającego.
⚠️ Usunięcie i odtworzenie venva kasuje wszystko, co było w nim zainstalowane. Wyeksportuj najpierw swoje wymagania, jeśli nigdzie ich nie przypiąłeś.
# zsh — arm64 Homebrew Python
/opt/homebrew/bin/brew install python@3.12
# Recreate the venv with the NATIVE interpreter — do not reuse the old one
pip freeze > /tmp/requirements.txt
deactivate 2>/dev/null; rm -rf .venv
/opt/homebrew/bin/python3.12 -m venv .venv
source .venv/bin/activate
python -c "import platform; print(platform.processor())" # must print: arm
pip install --upgrade pip
pip install mlx mlx-lmarm, a instalacja dochodzi do końca, zamiast zgłaszać brak pasującej dystrybucji.python -c "import mlx.core as mx; print(mx.default_device())"Udana instalacja nie jest dowodem, że praca ląduje na GPU. mx.default_device() powinno zgłaszać urządzenie GPU. Uruchom krótkie generowanie i obserwuj Monitor aktywności → Okno → Historia GPU albo powermetrics z próbnikiem GPU — powinieneś zobaczyć rosnącą aktywność karty przez cały ten czas. Jeśli urządzenie jest właściwe, a wykres GPU pozostaje płaski, zadanie nie dociera do Metala.
# zsh — what device does MLX think it has?
python -c "import mlx.core as mx; print(mx.default_device())"
# A short generation to watch
python -m mlx_lm.generate --model mlx-community/Llama-3.2-3B-Instruct-4bit \
--prompt "Write one sentence about the sea." --max-tokens 64
# In a second terminal, watch GPU power while it runs
sudo powermetrics --samplers gpu_power -i 1000 -n 10sudo powermetrics --samplers gpu_power -i 1000 -n 5 | grep -i "GPU Power"Czytelnicy przychodzą z założeniem, że MLX jest na Macu bezwzględnie szybszy od llama.cpp, a w różnych rodzinach modeli wcale nie jest to niezawodnie prawdą. MLX dobrze pasuje, gdy chcesz robić fine-tuning na Macu, pracować w Pythonie i w kodzie o kształcie NumPy-owym albo używać modelu opublikowanego przez społeczność w formacie MLX. llama.cpp i Ollama są lepszym domyślnym wyborem, gdy zależy ci na najszerszym wyborze GGUF-ów, na serwerze albo po prostu na najmniejszej ilości konfiguracji. Zamiast zakładać, przetestuj konkretny model, na którym ci zależy, na obu — a jeśli między tobą a MLX stoi budowanie ze źródeł, pamiętaj, że potrzebuje ono Xcode 15+, macOS SDK 14+, Clang 15+ i CMake 3.25+, a same Command Line Tools nie wystarczą.
# zsh — the source-build prerequisites, if you need one
xcodebuild -version # Xcode >= 15.0
xcrun --show-sdk-version # SDK >= 14.0
cmake --version # >= 3.25
clang --version # >= 15Jeśli MLX działa na GPU, a Mac wciąż się męczy, ogranicznikiem jest pamięć albo temperatura, a nie framework. Strona o swapowaniu omawia, co faktycznie mieści się w każdym wariancie pamięci; strona o throttlingu — prędkość, która dobrze się zaczyna i spada o połowę.
Dołącz to, zgłaszając problem
python3 -c "import platform; print(platform.processor())"which -a python3 oraz file $(which python3)sw_vers, python3 --version i archBo MLX dostarcza wyłącznie wheele arm64, a twój interpreter nie jest arm64. Python x86 działający pod Rosettą 2 nie pasuje do żadnej dystrybucji, więc pip zgłasza, że takiej nie ma. Uruchom python -c "import platform; print(platform.processor())" — musi wypisać arm.
Że twój Python to build x86 działający pod Rosettą 2 na Macu z Apple Silicon. Zwykle bierze się to z intelowego Homebrew w /usr/local, condy zbudowanej pod Intela albo z terminala z zaznaczoną opcją „Otwórz przy użyciu Rosetty” w oknie informacji.
Prawie na pewno dlatego, że użyłeś istniejącego środowiska wirtualnego. Venv zapamiętuje interpreter, który go stworzył, i dalej z niego korzysta. Usuń venv i utwórz go na nowo natywnym Pythonem, a potem sprawdź procesor już w nowym środowisku.
macOS 14.0 lub nowszy, Apple Silicon oraz natywny Python arm64 w wersji 3.10 lub nowszej. Budowanie ze źródeł wymaga dodatkowo Xcode 15+, macOS SDK 14+, Clang 15+ i CMake 3.25+ — same Command Line Tools do budowania ze źródeł nie wystarczą.
Nie niezawodnie, a różni się to między rodzinami modeli. MLX pasuje do pracy w Pythonie, fine-tuningu na Macu i modeli publikowanych w formacie MLX. llama.cpp i Ollama pasują do najszerszego wyboru GGUF-ów i najmniejszej ilości konfiguracji. Przetestuj model, którego naprawdę używasz.