ModuleNotFound while Dockering python 应用程序
ModuleNotFound while Dockering python app
我有一个简单的 python 应用程序,它使用我创建的自定义 class。以下文件夹结构如下:
│ mains
| ├── run_it.py
| ├── __init__.py
│ ├── parsers
│ ├── parser.py
│ ├── __init__.py
在run_it.py主程序中,我调用
from mains.parsers.parser import Parser
在本地模式下,我在 ~/.bashrc 中添加了以下行并且效果很好:
export PYTHONPATH="${PYTHONPATH}:/home/.../THE_FOLDER_ABOVE_MAINS"
但是当我尝试对应用程序进行 docker 化时,出现以下错误:
File "/app/run_it.py", line 11, in <module>
from mains.parsers.parser import Parser
ModuleNotFoundError: No module named 'mains'
我的 Dockerfile 是:
FROM python:3
RUN mkdir /app
WORKDIR /app
ADD . /app/
RUN apt-get update
RUN pip3 install gunicorn
RUN pip3 install -r requirements.txt
EXPOSE 5000
ENV PYTHONIOENCODING=utf-8
ENV GUNICORN_CMD_ARGS="--bind 0.0.0.0:5000 --workers=2"
CMD ["gunicorn","run_it:app"]
知道我该如何解决吗?
提前致谢!
我没有看到你在容器中设置任何模块路径,那么对于你的情况,文件夹 app
其中 运行 顶级脚本 run_it.py
被自动添加到模块路径.
因此,您应该使用下一个:
from parsers.parser import Parser
另一种方法也可以添加到您的 Dockerfile 旁边(假设它与 mains 的文件夹相同):
ENV PYTHONPATH=/app
那你还可以用from mains.parsers.parser import Parser
尝试一下它的工作..
从 parsers.parser 导入解析器
我有一个简单的 python 应用程序,它使用我创建的自定义 class。以下文件夹结构如下:
│ mains
| ├── run_it.py
| ├── __init__.py
│ ├── parsers
│ ├── parser.py
│ ├── __init__.py
在run_it.py主程序中,我调用
from mains.parsers.parser import Parser
在本地模式下,我在 ~/.bashrc 中添加了以下行并且效果很好:
export PYTHONPATH="${PYTHONPATH}:/home/.../THE_FOLDER_ABOVE_MAINS"
但是当我尝试对应用程序进行 docker 化时,出现以下错误:
File "/app/run_it.py", line 11, in <module>
from mains.parsers.parser import Parser
ModuleNotFoundError: No module named 'mains'
我的 Dockerfile 是:
FROM python:3
RUN mkdir /app
WORKDIR /app
ADD . /app/
RUN apt-get update
RUN pip3 install gunicorn
RUN pip3 install -r requirements.txt
EXPOSE 5000
ENV PYTHONIOENCODING=utf-8
ENV GUNICORN_CMD_ARGS="--bind 0.0.0.0:5000 --workers=2"
CMD ["gunicorn","run_it:app"]
知道我该如何解决吗? 提前致谢!
我没有看到你在容器中设置任何模块路径,那么对于你的情况,文件夹 app
其中 运行 顶级脚本 run_it.py
被自动添加到模块路径.
因此,您应该使用下一个:
from parsers.parser import Parser
另一种方法也可以添加到您的 Dockerfile 旁边(假设它与 mains 的文件夹相同):
ENV PYTHONPATH=/app
那你还可以用from mains.parsers.parser import Parser
尝试一下它的工作..
从 parsers.parser 导入解析器