After years of faithful service Python 2.7 will not be maintained after January 1st, 2020. The news convinced me that it was the time to finally migrate the scripts I had running on my RPi to Python 3.
Adapting my code was an easy task except for the following annoying error when trying to load a JSON TypeError: the JSON object must be str, not ‘bytes’. Everything was fine on my Mac as Python 3.6+ does this automatically so I wanted to have the same version on my Raspberry Pi (which was on Python 3.5).
Installing Python3.6 on Raspbian Stretch his a matter of few commands to copy/paste. But after the install I had the following error each time I wanted to install a library using pip pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
I took me a few hours but I finally managed to fix the issue. If you are encountering the same SSL issues with pip and Python 3.6+ follow the steps below. All of them. In the same order. Even if you already have Python 3.6 installed. Trust me, I had to (re)build/install it 3 times because I wanted to save a few minutes.
Note: This also works for Python 3.7. You just need to adjust the names accordingly.
Hope that will help you!
Install the required build-tools:
apt install libffi-dev libbz2-dev liblzma-dev libsqlite3-dev libncurses5-dev libgdbm-dev zlib1g-dev libreadline-dev libssl-dev tk-dev build-essential libncursesw5-dev libc6-dev openssl git
Download, build and install Python 3.6.5 (the most recent release is available on the official website):
wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xztar xf Python-3.6.5.tar.xzcd Python-3.6.5./configure –enable-optimizationsmake -j -l 4sudo make altinstall
These steps took me around 4 hours on a Raspberry Pi 2 B.
Once finished, open ~/.bashrc file using nano:
sudo nano ~/.bashrc
and add new alias on the top of the file to change your default python executable:
You can also usepython by changing the previous command to alias python=’python3.6′. Once done, exit nano and source your .bashrc file:
Confirm the changes by checking your default python3 version:
The previous command should give you python3.6.5.
To download and install pip run the following:
curl -O https://bootstrap.pypa.io/get-pip.pysudo python3.6 get-pip.py
And now you can install packages for Python 3.6 with pip-3.6!