slim icon indicating copy to clipboard operation
slim copied to clipboard

Python: ModuleNotFoundError: No module named 'traceback'

Open jurgonaut opened this issue 4 years ago • 6 comments

I'm trying to minimize a docker container that uses python and I am getting an error. My Dockerfile looks like this:

FROM amazonlinux:latest

RUN yum install -y make gcc nano openssl-devel bzip2-devel libffi-devel tar zip unzip gzip wget mysql mariadb-devel python-devel sqlite-devel aws-cli \
    && cd /tmp \
    && wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz \
    && tar -xzf Python-3.7.3.tgz \
    && cd Python-3.7.3 \
    && ./configure \
    && make \
    && make altinstall \
    && cd .. \
    && rm -r Python-3.7.3 \
    && rm -r Python-3.7.3.tgz \
    && pip3.7 install scrapy \
    && pip3.7 install mysqlclient \
    && cd /

When I run the container I get the error:

Error processing line 1 of /usr/local/lib/python3.7/site-packages/zope.interface-5.1.0-py3.7-nspkg.pth:

Fatal Python error: initsite: Failed to import the site module
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site.py", line 168, in addpackage
    exec(line)
  File "<string>", line 1, in <module>
  File "<frozen importlib._bootstrap>", line 580, in module_from_spec
AttributeError: 'NoneType' object has no attribute 'loader'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site.py", line 586, in <module>
    main()
  File "/usr/local/lib/python3.7/site.py", line 573, in main
    known_paths = addsitepackages(known_paths)
  File "/usr/local/lib/python3.7/site.py", line 349, in addsitepackages
    addsitedir(sitedir, known_paths)
  File "/usr/local/lib/python3.7/site.py", line 207, in addsitedir
    addpackage(sitedir, name, known_paths)
  File "/usr/local/lib/python3.7/site.py", line 178, in addpackage
    import traceback
ModuleNotFoundError: No module named 'traceback'

The command I am using for building the slim container is:

docker-slim build --http-probe=false python-test-slim

Is there a flag I am missing or something similar? I am new to this project so I am not sure if this issue related to docker-slim. But I would be really happy I could get some help because the results amazing.

jurgonaut avatar Sep 02 '20 13:09 jurgonaut

Is it your complete Dockerfile @jurgonaut ? Is it just one RUN instruction (and FROM)? This looks like a custom base image... Do you have another image with your application code where you use this custom base image?

kcq avatar Sep 02 '20 15:09 kcq

Yes this is all. There is also a COPY which copies a simple python script to test if all the packages are installed. The python script only has a few imports. The base image is an official AWS image. What do you suggest, will it work with another base image?

jurgonaut avatar Sep 02 '20 16:09 jurgonaut

@jurgonaut is that COPY instruction in the same Dockerfile? Do you set the ENTRYPOINT and/or CMD instructions? What do they look like if you do? If not, how do you invoke your simple python script in the container?

kcq avatar Sep 03 '20 01:09 kcq

@kcq This is the rest of the Dockerfile

ADD ./entry.sh /usr/local/bin/entry.sh
ADD ./test.py /usr/local/bin/test.py

RUN ["chmod", "+x", "/usr/local/bin/entry.sh"]
RUN ["chmod", "+x", "/usr/local/bin/test.py"]

WORKDIR /usr/local/bin
ENTRYPOINT ["/bin/bash", "/usr/local/bin/entry.sh"]

The file entry.sh content is:

python3.7 ./test.py

And test.py content is:

import MySQLdb

print("SUCCESS")

jurgonaut avatar Sep 03 '20 07:09 jurgonaut

@jurgonaut did you find a solution ? I have the exact same problem

michaelcukier avatar Jan 10 '24 18:01 michaelcukier

@michaelcukier No I didn't. I haven't work on this since 2020 so I don't know of any recent developments.

jurgonaut avatar Jan 14 '24 12:01 jurgonaut