The Python Foundation has really been amping up the real-time capabilities of Python with the new asyncio library. Asyncio enables Pythonistas to write code that is asynchronous, allowing for a more event-driven approach to writing software. What platform would benefit more from this new tech than microcomputers like the Raspberry Pi, which are finding new life as lightweight, yet powerful IoT (Internet of Things) devices? In my never-ending quest to set up a feedback system in my office where light levels can be communicated to an automated shade setup, I figured this would be the very first step to get there.
I wanted to have a Raspberry Pi that checks the following boxes:
- OS: Raspbian
- Python Env: Python 3.5 (installed and routed to with Pyenv)
- An actual computer
- Install PiBakery or NOOBS
- Raspberry Pi 3, primarily for the built-in WiFi card. Although I bet the Pi Zero W would work fabulously as well.
Install Raspbian onto SD-Card for Pi
Raspbian is the go-to OS for Raspberry Pi. It has the most support on this hardware, and also runs the smoothest. It is a Linux Distro that is Debian-based, so a lot of the software packages you can install in Debian and Ubuntu are the same as the ones you can install on Raspbian.
PiBakery Route (Recommended)
- Install PiBakery
- Use the handy-dandy interface to do the following:
- On First Boot:
- Set hostname to
- Set user password to
- Setup Wifi (with Network, Pass and Type, also Type should be
- Set hostname to
- On First Boot:
- Go to the Raspberry Pi Software Setup Page
- Follow their instructions to do the following:
Setup The Python Environment
Using a Python version manager like
pyenv to install Python makes the process less a painful chore and more a pleasant pastime. Raspbian comes with Python 2.x and the package manager enables installing Python 3.4.x, but if we want to mess around with asyncio's fabulous
async/await syntactic sugar, Python ≥3.5 is where it's at.
- Plug SD Card into Pi and plug in the power.
- If you went the NOOBs route, you'll want to set hostname on your Pi so that you don't have to look for the IP every time.
- Wire Pi up to monitor and keyboard and then open the terminal OR ssh to it (ie
ssh pi@<hostname>.localthen enter
<password>at the prompt).
- Once you're logged in, install a bunch of other much-needed but under-appreciated dependencies with the following:
sudo apt-get update && sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev openssl bzip2
- Run pyenv-installer with the following command:
curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
- Copy the following lines into the
~/.bashrcfile or into any file that you'll have
export PATH="~/.pyenv/bin:$PATH" eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)"
pyenv install 3.5.1. Pyenv should now be installing Python 3.5.1 into
~/.pyenv/bin. This will take anywhere between 10 minutes to an hour, depending on your internet connection and whether you went with a Pi 3 or a Pi Zero W.
pyenv global 3.5.1. The global Python version your Pi will use is now 3.5.1.
And that's it! Optionally, you can install something like
virtualenvwrapper, but on lightweight platforms like the Pi, I tend to just install things directly, since it's unlikely I'll be using it for anything else.
Why Python 3.5?
At this point, you might be asking me, "Dean, why did you make me go through
pyenv-installer to install Python 3.5 when Python 3.4 also has
asyncio, albeit in a slightly diminished form?". Let me refer you to this page, which details all the ways in which asyncio is made even better with the availability of things like asynchronous context managers (because calling
anything.close() directly is such a drag),
async/await syntax, and other new goodness. Also, with PEP448, unpacking from lists and dicts is even better! Who wouldn't want that!
Dean Mercado is a Developer at Yeti. Dean is a developer at Yeti, and more importantly the owner of Yeti's office dog, Ben (benjipoops.com). His interests include baking bread, long distance running, and two other activities that cancel each other out. When he's not developing apps, he's drawing diagrams on his desk and drinking tea.