TL;DR: The Solution
Contents
Introduction
I remember a year ago, when I could not solve this problem for a different project so I ended up using a Docker container to emulate a simple linux environment to use psycopg2
. I'm a bit older and wiser now, so when faced with the same problem for my current project, I dug around all day today figuring out how to install psycopg2
in an M1 Mac environment. I tried many solutions that may have worked for others somehow, but ultimately did not work me. It turns out that the solution was the most vanilla installation I've done since I started using my M1 Mac Air.
The Solution
- Uninstall
pyenv
,pipx
, and all other versions ofpython
except your system's python. - Download the latest version of python from the python website. At the time of writing, I was downloading python
3.10.4
so look around to see if there is an even more updated version. - Run the installer. Once it's finished, if you check your Applications, you should have your new version of python there. To test your new installation, run
python3 --version
in a fresh terminal. - Run
pip3 install psycopg2-binary
Optional Steps
Optionally, you can also install PostgreSQL on your M1 mac as well.
- Download the postgreSQL installation from the official website. At the time of writing, the most recent version, PostgreSQL 14, looks like it has the most support for the M1 Mac architecture.
- Run the installation wizard. The default location for my installation was
/Library/PostgreSQL/14
, so I just used that. - Add PostgreSQL bin to PATH in your
.zshrc
file. It should look like the following:
export PATH="/your/path/to/PostgreSQL/14/bin:\$PATH"
Alternatively, you can can use this command if your installation was made in the same folder as mine:
echo 'export PATH="/Library/PostgreSQL/14/bin:$PATH"' >> ~/.zshrc
- Open a new terminal and run
pg_config
in the command line. Your configuration should come up. - To get started on your Django application, PostgreSQL offers a brief tutorial, which is actually useful later on when you're replacing the initial SQLite database in settings.
Avoid These Potential Solutions
Avoid using a version manager like pyenv
or asdf
. If you install psycopg2
with this configuration, you will likely run into architectural issues with arm64
.
Avoid using Homebrew
or anything that was installed with Homebrew
. openssl
, libpq
, and other TLS/SSL packages will not be sufficient substitutes for the lack of SSL support for Python. Even adding a symlink to the specific libraries needed will not be sufficient enough to solve the problem.
Workarounds
As I mentioned in the introduction, you can use Docker to containerize your application and ultimately install psycopg2
. But it's not the simplest or the fastest solution. If you must do it this way, here a few helpful links to the Github project that I was working on at the time to help you get started:
- My Tutorial of getting started with Docker
- My
Dockerfile
used for theDjango
Backend - My
docker-compose.yml
file used for the Frontend and Backend
Conclusion
I hope this helps. It appears that Apple's M1 chip has received a ton of support from the developer community over the past year, which makes me less inclined to sell my Mac Air for a Framework laptop.
I can only speculate that Apple wants to eliminate the need for 3rd-party package managers and version managers like Homebrew
, and pyenv
and asdf
, respectively. The newest update, Monterey 12.3, is hostile to 3rd party programs especially if Xcode is not installed. It's not impossible to install and use 3rd-party applications but there will be security pop-up that needs a little more than a password to get around..
Top comments (0)