Hello everyone. I am facing a very stupid and annoying issue. I am trying to deploy an application to the Streamlit Cloud. Among required Python packages I have the OpenCV. It’s well known that Streamlit Cloud works only with the headless version of OpenCV. So my requirements.txt file just looks like this:
streamlit
opencv-python-headless
After deploying the app to my Streamlit Cloud with such requirements everything works just fine and in logs I can see the next version of OpenCV installed:
opencv-python-headless-4.6.0.66
However as the next step for my application I also need to install another Python package MediaPipe. So to make everything work I just add another line to my requirements.txt and it looks like this:
streamlit
opencv-python-headless
mediapipe
And it results to my app crash with the error:
Traceback (most recent call last):
File "/home/appuser/venv/lib/python3.9/site-packages/streamlit/scriptrunner/script_runner.py", line 557, in _run_script
exec(code, module.__dict__)
File "streamlit_app.py", line 2, in <module>
import cv2
File "/home/appuser/venv/lib/python3.9/site-packages/cv2/__init__.py", line 181, in <module>
bootstrap()
File "/home/appuser/venv/lib/python3.9/site-packages/cv2/__init__.py", line 153, in bootstrap
native_module = importlib.import_module("cv2")
File "/usr/local/lib/python3.9/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
ImportError: libGL.so.1: cannot open shared object file: No such file or directory
Or in a nutshell:
ImportError: No module named cv2
And among the other modules in my app I can see in logs the next two lines:
opencv-contrib-python-4.6.0.66
opencv-python-headless-4.6.0.66
So it looks like the MediaPipe module has it’s own dependencies with the OpenCV module and it implicitly installs it to the system. As long as this is the contrib (not headless) version of the OpenCV, it results into a crash of my app at the Streamlit Cloud.
Any ideas how to fix it? Maybe there is something like a terminal for my Streamlit Cloud app where I can just remove an unwanted Python package with pip uninstall
command? Or I can somehow control these processes throughout the requirements.txt file? The search in the Internet and the Forum haven’t given me options like these.
I will be glad to have any help here guys. Thanks!