Post

Installing Streamlit on RPi4

How to install Streamlit on RPi4 with Ubuntu 20.04.2 LTS 64-bit.

Installing Streamlit on RPi4

Update for Raspberry Pi OS Bookworm

With the release of Raspberry Pi OS Bookworm, a virtual environment is required to install Python packages. If you try to install something outside of a virtual environment you will be met with the following error message:

1
2
3
4
5
6
7
8
pip install streamlit

error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.

This means that you must now install virtualenv with:

1
sudo apt install python3-virtualenv

After installing virtualenv, you can create a virtual environment and install Streamlit with:

1
2
3
virtualenv test
source test/bin/activate
pip install streamlit

You can also deactivate an environment with:

1
deactivate

I have not retested this with the 32-bit version of Raspberry Pi OS but I assume it is still not compatible, as noted in my previous updates to this post.

Update as of 8/6/2022

As of 8/6/2022 I have confirmed on both the latest 64-bit Raspberry Pi OS and the 64-bit Ubuntu 20.04.2 LTS operating systems that Streamlit can now be easily installed with the most current pip version. It still seems that Streamlit is not compatible with the 32-bit version of Raspberry Pi OS.

A fresh install of the 64-bit Raspberry Pi OS was missing pip for me so I installed it with

1
sudo apt install python3-pip

Original Post

I recently got a Raspberry Pi 4 and the first project I want to use it for is scraping stock data. In addition, I want the Pi to run a web-based dashboard in the background so that I can monitor the scraping and data quality. I have some familiarity with Streamlit, which is a Python package that allows you to build data science web-based dashboards using Python, so I figure I should try to get that running on the Pi. For reference, I am running Ubuntu 20.04.2 LTS 64-bit on my Raspberry Pi 4. Just trying to run a pip install failed.

1
2
3
4
5
6
7
8
9
$ pip install streamlit
...
-- Running cmake for pyarrow
cmake -DPYTHON_EXECUTABLE=/home/ubuntu/.virtualenvs/stonks/bin/python -DPython3_EXECUTABLE=/home/ubuntu/.virtualenvs/stonks/bin/python  -DPYARROW_BUILD_CUDA=off -DPYARROW_BUILD_FLIGHT=off -DPYARROW_BUILD_GANDIVA=off -DPYARROW_BUILD_DATASET=off -DPYARROW_BUILD_ORC=off -DPYARROW_BUILD_PARQUET=off -DPYARROW_BUILD_PLASMA=off -DPYARROW_BUILD_S3=off -DPYARROW_BUILD_HDFS=off -DPYARROW_USE_TENSORFLOW=off -DPYARROW_BUNDLE_ARROW_CPP=off -DPYARROW_BUNDLE_BOOST=off -DPYARROW_GENERATE_COVERAGE=off -DPYARROW_BOOST_USE_SHARED=on -DPYARROW_PARQUET_USE_SHARED=on -DCMAKE_BUILD_TYPE=release /tmp/pip-install-b8ahqkyq/pyarrow_c59a8f53d01b46b58561b671c0a23307
error: command 'cmake' failed with exit status 1
----------------------------------------
ERROR: Failed building wheel for pyarrow
Failed to build pyarrow
ERROR: Could not build wheels for pyarrow which use PEP 517 and cannot be installed directly

This is a pretty easy error to debug. The issue is that I do not currently have cmake installed. This is easily remedied by running:

1
sudo apt install cmake

Trying to run a pip install fails again this time with a more cryptic error.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ pip install streamlit
...
-- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)
-- Could NOT find Arrow (missing: Arrow_DIR)
CMake Error at /usr/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:146 (message):
  Could NOT find Arrow (missing: ARROW_INCLUDE_DIR ARROW_LIB_DIR
  ARROW_FULL_SO_VERSION ARROW_SO_VERSION)
Call Stack (most recent call first):
  /usr/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:393 (_FPHSA_FAILURE_MESSAGE)
  cmake_modules/FindArrow.cmake:419 (find_package_handle_standard_args)
  cmake_modules/FindArrowPython.cmake:46 (find_package)
  CMakeLists.txt:214 (find_package)


-- Configuring incomplete, errors occurred!
See also "/tmp/pip-install-ukwvzvq3/pyarrow_e3f093a86d3542b987b698c48bfa3ebe/build/temp.linux-aarch64-3.8/CMakeFiles/CMakeOutput.log".
error: command 'cmake' failed with exit status 1
----------------------------------------
ERROR: Failed building wheel for pyarrow
Failed to build pyarrow
ERROR: Could not build wheels for pyarrow which use PEP 517 and cannot be installed directly

After some searching I came across this discussion on the Streamlit site https://discuss.streamlit.io/t/raspberry-pi-streamlit/2900/35. Some people solved it by switching to Archiconda but I want to stick with using virtualenvs. One of the suggestions in the post I got to work but needs some modification. Running the following finally works (note: the original commands no longer work and I have updated them appropriately):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# !!! Apparently these commands no longer work !!!
wget https://apache.bintray.com/arrow/ubuntu/apache-arrow-archive-keyring-latest-focal.deb
sudo apt install ./apache-arrow-archive-keyring-latest-focal.deb

# !!! Try these instead !!!
sudo apt install ca-certificates lsb-release
wget https://apache.jfrog.io/artifactory/arrow/$(lsb_release --id --short | tr 'A-Z' 'a-z')/apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb
sudo apt install ./apache-arrow-apt-source-latest-focal.deb

sudo apt update

sudo apt install libarrow-dev libarrow-python-dev

ARROW_HOME=/usr PYARROW_CMAKE_OPTIONS="-DARROW_ARMV8_ARCH=armv8-a" pip install streamlit

After completing the install I can run the included Streamlit demo:

1
streamlit hello

Hopefully this helps someone else who gets stuck!

UPDATES:

  1. Streamlit will not work on 32-bit operating systems. I have tried debugging this a couple of times and was not able to get it working.
  2. The source location for Apache Arrow has changed a couple of times. I believe the commands above are currently working for Ubuntu (I think you may need to make a small modification for Raspberry Pi OS). I left the legacy commands for reference.
  3. As of now if you update pip to the latest version, you can install Streamlit without issue from pip.
This post is licensed under CC BY 4.0 by the author.