Memphis Meng
Memphis Meng

Reputation: 1681

ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory when importing cv2 using Docker container

I was builting a web app with streamlit, OpenCV and Torch on local machine. The whole project went well until I built a Docker file and was about to transport it to my Google Cloud Platform. Can anyone tell me what is really going wrong here? enter image description here

Here is my Dockerfile:

FROM pytorch/pytorch:latest
RUN pip install virtualenv
ENV VIRTUAL_ENV=/venv
RUN virtualenv venv -p python3
ENV PATH="VIRTUAL_ENV/bin:$PATH"

WORKDIR /app
ADD . /app

# Install dependencies
RUN pip install -r requirements.txt

# copying all files over
COPY . /app

# Expose port 
ENV PORT 8501

# cmd to launch app when container is run
CMD streamlit run app.py

# streamlit-specific commands for config
ENV LC_ALL=C.UTF-8
ENV LANG=C.UTF-8
RUN mkdir -p /root/.streamlit
RUN bash -c 'echo -e "\
[general]\n\
email = \"\"\n\
" > /root/.streamlit/credentials.toml'

RUN bash -c 'echo -e "\
[server]\n\
enableCORS = false\n\
" > /root/.streamlit/config.toml'

And requirements.txt:

albumentations==0.4.5
matplotlib==3.2.2
numpy==1.19.0
opencv-python==4.1.0.25
# opencv-python-headless==4.2.0.34
pandas==1.0.5
Pillow==7.1.2
scipy==1.5.0
streamlit==0.62.0

Upvotes: 22

Views: 36920

Answers (5)

javavh
javavh

Reputation: 21

On openSUSE, this fixed the issue:

sudo zypper install libgthread-2_0-0 libgthread-2_0-0-32bit

Upvotes: 2

tturbo
tturbo

Reputation: 1166

In my case (on NixOS) it was enough to install the headless version:

pip uninstall opencv-python
pip install opencv-python-headless

Upvotes: 1

EricT
EricT

Reputation: 443

Anyone encountering this issue and wanting to install a minimum number of external packages, this solved using open-cv and torch in one docker image for me:

RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install\
    libgl1\
    libgl1-mesa-glx \ 
    libglib2.0-0 -y && \
    rm -rf /var/lib/apt/lists/*

P.S.: Notice how the combined apt-get update and apt-get install safe one layer.

P.S.S.: As huyu mentioned: include this in your Dockerfile before the pip command.

Edit: Thanks @gardner-bickford for suggesting to remove apt-cache to further decrease image size.

Upvotes: 8

userko
userko

Reputation: 51

I had similar error when trying to run the fresh install of Anki flashcard program. Searched/installed missing "libgthread-2" via YaST2 Package Manager.

Upvotes: 0

huyu
huyu

Reputation: 454

Maybe, you should run following command before pip.

apt update
apt-get install -y libglib2.0-0 libsm6 libxrender1 libxext6

Upvotes: 43

Related Questions