How are you doing ? Welcome to another blog post. In this post, I'll guide you on how to install python on Mac M1 (apple silicon chip). Before we get started, let me tell you why is it difficult to install python on the M1 chip.
The difference in computer architectures
There are many different ways the computer can be architectured. CPUs work by executing assembly language. Everything will be in binary and there will be instructions such as ADD, LSHIFT, RSHIFT etc... So, each architecture is different in processing these instructions.
x86 & x64 - This is the most commonly used architecture. Most of the intel CPUs use this architecture.
arm64 - Apple silicon chip uses this architecture. This is very popular among mobiles, raspberry pi etc..
How to install python on Mac M1
Most of the software works very well on x86 & x64 architectures because it is very old and popular. The same case with
python too. We don't have build tools and processes for
arm64 architecture. Hence, we need a translator which converts the
x64 instructions from
python build tools to
arm64 instructions. It is called
rosetta. It is developed by Apple to give backward compatibility for the users.
So, we need to install it first.
Step 1 - Install Rosetta
Open a terminal and copy-paste the below command
/usr/sbin/softwareupdate --install-rosetta --agree-to-license
Step 2 - Install XCode developer tools
Step 3 - Install homebrew
It is a package manager for installing new software.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Step 4 - Rosetta Terminal
Go to your “Applications” folder on Finder → right-click Terminal in the “Utilities” folder → Duplicate → rename to “Rosetta Terminal” → Get Info → Open using Rosetta
Pro tip: install iTerm2 using
brew install iterm2. It is terminal on steroids. It has so many features such as horizontal and vertical splitting, autocompletion, etc...
If you are using iTerm2 then follow a similar process for it too.
Go to your “Applications” folder on Finder → right-click iTerm2 → Duplicate → rename to “Rosetta iTerm2” → Get Info → Open using Rosetta
Step 5 - Install homebrew on Rosetta Terminal
Open "Rosetta iTerm2" and install homebrew again. This is x86 / x64 version of homebrew installed on top of rosetta. Repeat step 3 again.
Step 6 - Install Pyenv
To install python we will use
pyenv. Let's install it first
Copy and paste this command on Rosetta iTerm2
curl https://pyenv.run | bash
Step 7 - Install Python using pyenv
Execute these commands on Rosetta iTerm2
Install some pre-requisites first
brew install openssl@3 bzip2 readline zlib
Let's install python now.
For python >= 3.8.*
For versions 3.8.3 and 3.8.7 we can use patches from homebrew
You can find the patches here
pyenv install --patch 3.8.7 <<(curl -sSL https://raw.githubusercontent.com/Homebrew/formula-patches/master/python/3.8.7.patch\?full_index\=1)
For any other versions or if the above patch doesn't work, try with patch from
cpython. Just replace the version 3.8.2 with other version.
CFLAGS="-I$(brew --prefix openssl)/include -I$(brew --prefix bzip2)/include -I$(brew --prefix readline)/include -I$(xcrun --show-sdk-path)/usr/include" LDFLAGS="-L$(brew --prefix openssl)/lib -L$(brew --prefix readline)/lib -L$(brew --prefix zlib)/lib -L$(brew --prefix bzip2)/lib" pyenv install --verbose --patch 3.8.2 < <(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch\?full_index\=1)
That's all folks! in my next post, I'll write an article on setting up virtual environments in python. See you till then, Bye!
Did you find this article valuable?
Support Lokesh Sanapalli by becoming a sponsor. Any amount is appreciated!