aws / aws-lambda-python-runtime-interface-client

Apache License 2.0
258 stars 73 forks source link

Unable to import module 'app': No module named '_tkinter'", "errorType": "Runtime.ImportModuleError" #90

Open ganesh3 opened 1 year ago

ganesh3 commented 1 year ago

Hi,

I am trying to create a docker containers that will run on lambda but I continuously get the error: [Unable to import module 'app': No module named '_tkinter'", "errorType": "Runtime.ImportModuleError" on running the container.

I am sharing the my Dockerfile below:

FROM public.ecr.aws/lambda/python:3.8
RUN yum -y update
RUN yum -y install gcc
RUN yum install -y gcc-c++
RUN yum install -y git
RUN yum install -y which
COPY requirements.txt ./requirements.txt
RUN pip install -r requirements.txt \
    && pip install -e git+https://github.com/ganesh3/icevision.git@master#egg=icevision[inference] --upgrade
RUN mkdir -p ./fonts/
RUN curl -LJO https://raw.githubusercontent.com/airctic/storage/master/SpaceGrotesk-Medium.ttf
RUN cp SpaceGrotesk-Medium.ttf ./fonts/
RUN yum install -y tkinter tcl-devel tk-devel
COPY model_dir ./model_dir
COPY /app/app.py   ./
CMD ["app.handler"] 

The requirements.txt:

--find-links  https://download.pytorch.org/whl/torch_stable.html
torch==1.10.0+cpu 
torchvision==0.11.1+cpu
--find-links  https://download.openmmlab.com/mmcv/dist/cpu/torch1.10.0/index.html
mmcv-full==1.3.17
mmdet==2.17.0

The tkinter package is a basic package in python and hence required but even after installing it is not able to find the package. I logged in to the docker container using the below:

docker exec -it <container_name> sh

Then I logged into the python shell and ran:

>>> import tkinter
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/var/lang/lib/python3.8/tkinter/__init__.py", line 36, in <module>
    import _tkinter # If this fails your Python may not be configured for Tk
ModuleNotFoundError: No module named '_tkinter'

I ran the following in the python shell:

import subprocess
subprocess.call(['pip', 'install', 'tk'])

I also ran the following to install tkinter:

yum install -y tkinter
yum install -y python3-tkinter

Nothing seems to work and looks like the was lambda python runtime needs to have this package to run python smoothly. Can someone please suggest?

Warm Regards Ganesh Bhat

mespiga commented 1 year ago

You aren't going to be able to run tkinter on AWS lambda. Tkinter requires a display.

ganesh3 commented 1 year ago

Yes, I understand. I am not using tkinter in my project at all. My current understanding is that it is required by pillow package which is a dependency for torchvision. Torchvision being a very common package for deployment, I believe there needs to be a solution to it.

mespiga commented 1 year ago

Just tested pip install torchvision inside container and it works with FROM public.ecr.aws/lambda/python:3.8

cwashington-bjss commented 6 months ago

I hit this error in Lambda due to an overly helpful CoPilot import statement...

shashidhar100 commented 2 days ago

I'm facing same issue here I'm unable to run lambda