yeti logo icon
Close Icon
contact us
We'll reply within 24 hours.
Thank you! Your message has been received!
A yeti hand giving a thumb's up
Oops! Something went wrong while submitting the form.

Set Up a Raspberry Pi with Raspbian, running Python 3.5

April 7, 2017

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:


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)

  1. Install PiBakery
  2. Use the handy-dandy interface to do the following:
  3. On First Boot:
  4. Set hostname to <hostname>.local
  5. Set user password to <password>
  6. Setup Wifi (with Network, Pass and Type, also Type should be WPA/WPA2)
  7. Reboot


  1. Go to the Raspberry Pi Software Setup Page
  2. Follow their instructions to do the following:
  3. Install Raspbian
  4. Setup Wi-Fi
  5. Setup the Pi's hostname

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.

  1. Plug SD Card into Pi and plug in the power.

  2. 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.

  3. Wire Pi up to monitor and keyboard and then open the terminal OR ssh to it (ie ssh pi@<hostname>.local then enter <password> at the prompt).

  4. 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
  5. Run pyenv-installer with the following command:curl -L | bash
  6. Copy the following lines into the ~/.bashrc file or into any file that you'll have ~/.bashrc execute.export PATH="~/.pyenv/bin:$PATH"
    eval "$(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"
  7. Run ~/.bashrc with source ~/.bashrc or . ~/.bashrc
  8. Run 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.
  9. Run 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!

You Might also like...

Busting 5 App Development Myths

The following are five pervasive myths about why app development should be a simple process — and the real reasons that a good product takes time.

Token-based Header Authentication for WebSockets behind Node.js

Using Node.JS to proxy requests to mutate them under the hood can be beneficial. In cases like these, it can also make your product more secure.

VIDEO: Building API's with Django and GraphQL

At our last Django Meetup Group event, Jayden Windle, the lead engineer at Jetpack, an on demand delivery company, talks building APIs with Django and GraphQL. Watch the video to learn more.

Browse all Blog Articles

Ready for your new product adventure?

Let's Get Started