“ModuleNotFoundError:我的 Docker 容器中没有名为 <package> 的模块”

Ray*_*imi 9 python python-3.x docker dockerfile

我正在尝试在 Docker 容器中运行 python 脚本,但我不知道为什么,python 找不到任何 python 模块。我认为它与 PYTHONPATH 环境变量有关,所以我尝试将其添加到 Dockerfile 中,如下所示:ENV PYTHONPATH $PYTHONPATH

但这没有用。这是我的 Dockerfile 的样子:

FROM ubuntu:16.04
MAINTAINER SaveMe SaveMe@Desperate.com

ADD . /app
WORKDIR /app

RUN apt-get update

RUN DEBIAN_FRONTEND=noninteractive apt-get install -y locales

# Set the locale
RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' 
/etc/locale.gen && \
    locale-gen
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
ENV PYTHONPATH ./app

#Install dependencies
RUN echo "===> Installing sudo to emulate normal OS behavior..."
RUN apt-get install -y software-properties-common
RUN apt-add-repository universe
RUN add-apt-repository ppa:jonathonf/python-3.6
RUN (apt-get update && apt-get upgrade -y -q && apt-get dist-upgrade -
y -q && apt-get -y -q autoclean && apt-get -y -q autoremove)
RUN apt-get install -y libxml2-dev libxslt-dev
RUN apt-get install -y python3.6 python3.6-dev python3.6-venv openssl 
ca-certificates python3-pip
RUN apt-get install -y  python3-dev python-dev libffi-dev gfortran
RUN apt-get install -y swig
RUN apt-get install -y sshpass openssh-client rsync python-pip python-
dev libffi-dev libssl-dev libxml2-dev libxslt1-dev libjpeg8-dev 
zlib1g-dev libpulse-dev
RUN pip install --upgrade pip
RUN pip install bugsnag

#Install python package + requirements.txt
RUN  pip3 install  -r requirements.txt


CMD ["python3.6", "import_emails.py"]
Run Code Online (Sandbox Code Playgroud)

当我尝试运行时:sudo docker run <my_container>我得到了这个回溯:

Traceback (most recent call last):
  File "import_emails.py", line 9, in <module>
    import bugsnag
ModuleNotFoundError: No module named 'bugsnag'
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我在这个项目中使用 python3.6。有关如何解决此问题的任何线索?

blu*_*res 6

在容器内,当我 时pip install bugsnag,我得到以下内容:

root@af08af24a458:/app# pip install bugsnag
Requirement already satisfied: bugsnag in /usr/local/lib/python2.7/dist-packages
Requirement already satisfied: webob in /usr/local/lib/python2.7/dist-packages (from bugsnag)
Requirement already satisfied: six<2,>=1.9 in /usr/local/lib/python2.7/dist-packages (from bugsnag)
Run Code Online (Sandbox Code Playgroud)

您可能在这里看到了问题。您正在安装 python2.7 的软件包(操作系统默认值),而不是您尝试使用的 python3.6。

查看此答案以帮助解决此问题:“ModuleNotFoundError: No module named <package>” in my Docker container

或者,这是一个问题virtualenv,类似的工具可以解决,您也可以研究一下。