T.P*_*Poe 5 python python-import python-2.7 docker
我在 Flask 应用程序中使用第三方包。当我在 Flask 应用程序和 docker 之外测试这些包时,它们工作得很好。当我将它们包含在应用程序中时,在构建并运行 docker 后,它在某些导入上失败。我不知道该怎么做才能正确导入模块。
这是项目的结构:
flask_app
??? Dockerfile
??? canetis
| ??? install.sh
| ??? __init__.py
| ??? align.py
| ??? utils.py
| ??? gentle
| ??? install.sh
| ??? gentle
| ??? __init__.py
| ??? resources.py
| ??? util
| ??? __init__.py
| ??? paths.py
| ??? ext
| ??? kaldi
| ??? install.sh
Run Code Online (Sandbox Code Playgroud)
该gentle包是从canetis/install.sh脚本中的git 克隆的。
使用的dockerfile:
FROM python:2.7
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
WORKDIR /app
RUN apt-get update
RUN pip install --upgrade pip
RUN apt-get update && \
apt-get -y install sudo
ADD ./requirements.txt ./requirements.txt
RUN pip install -r requirements.txt
ADD . /app
RUN cd ./canetis && ./install.sh && source ~/.bashrc
ENV WEB_CONCURRENCY 5
CMD gunicorn app:app
Run Code Online (Sandbox Code Playgroud)
构建 docker 时,如果失败并显示此错误:
| Traceback (most recent call last):
| File "/usr/local/lib/python2.7/runpy.py", line 174, in _run_module_as_main
| "__main__", fname, loader, pkg_name)
| File "/usr/local/lib/python2.7/runpy.py", line 72, in _run_code
| exec code in run_globals
| File "/app/app.py", line 3, in <module>
| import tasks
| File "tasks.py", line 3, in <module>
| from canetis.align import align
| File "canetis/align.py", line 3, in <module>
| from utils import run_gentle
| File "canetis/utils.py", line 2, in <module>
| import gentle as gentle
| File "/usr/local/lib/python2.7/site-packages/gentle/__init__.py", line 2, in <module>
| from resources import Resources
| File "/usr/local/lib/python2.7/site-packages/gentle/resources.py", line 4, in <module>
| from util.paths import get_resource, ENV_VAR
| ImportError: No module named util.paths
Run Code Online (Sandbox Code Playgroud)
问题可能是温柔模块有一个名为温柔的子文件夹,所以python无法正确找到它?但是为什么它可以在 docker 之外工作呢?任何帮助表示赞赏。