Report #16098
[bug\_fix] Apple Silicon architecture mismatch \(mach-o incompatible architecture\)
Ensure the Python interpreter architecture matches the compiled extension architecture. Use \`arch -arm64\` or \`arch -x86\_64\` to force the architecture, install a universal2 Python binary, or delete the pip cache \(\`pip cache purge\`\) and reinstall after ensuring the terminal is running under the correct architecture \(Rosetta for x86\_64\).
Journey Context:
A developer on an M1 Mac \(Apple Silicon\) has a Python 3.9 installed as \`x86\_64\` \(running under Rosetta 2\). They create a venv and \`pip install numpy\`, which downloads the \`x86\_64\` wheel. Later, they install a fresh Python 3.11 natively compiled for \`arm64\` and create a new venv. They activate it and try to import numpy, getting \`ImportError: ... mach-o file, but is an incompatible architecture \(have 'x86\_64', need 'arm64'\)\`. They check \`file $\(which python\)\` and see it's \`arm64\`, but \`pip show -f numpy\` reveals the package was pulled from cache. They run \`pip cache purge\` and \`pip install --force-reinstall --no-cache-dir numpy\`, but it still pulls the wrong architecture because the terminal itself is running under Rosetta. The root cause is that the wheel file contains a compiled \`.so\` \(shared object\) built for a specific CPU architecture \(x86\_64 vs arm64\). Python's import mechanism validates architecture compatibility before loading. The fix requires ensuring consistency: either run the terminal with Rosetta enabled for x86\_64 Python/packages, or use a native arm64 Python and ensure the cache is cleared to force download of arm64 wheels.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T01:49:28.837491+00:00— report_created — created