gpt4 book ai didi

python - docker中的 flask : different relative import in Dockerfile build and docker-compose

转载 作者:行者123 更新时间:2023-12-01 08:55:08 26 4
gpt4 key购买 nike

我有一个简单的 Flask 应用程序,其结构如下:

|__app     
| └── __init__.py
| └── config.py
└── docker-compose.yml
└── Dockerfile

这里的关键是__init__.py导入config.py。我使用 docker-compose 以 DEBUG 模式在容器中运行应用程序,而最终产品是仅从 Dockerfile 构建的容器。

__init__.py 文件:

from flask import Flask

from .config import config


def create_app(config_name='development'):
"""Create the app."""
app = Flask(__name__)
app.config.from_object(config[config_name])

@app.route('/', methods=['GET'])
def index():
return 'hello world'

return app

Dockerfile 在 Docker 容器中构建应用程序:

FROM python:3.6-alpine
COPY requirements.txt /
RUN pip install Flask gunicorn
COPY app/ /app
WORKDIR /app
EXPOSE 8000
CMD gunicorn --bind=0.0.0.0:8000 "__init__:create_app()"

docker-compose.yml 用于开发:它共享应用程序目录,以便使应用程序能够在 DEBUG 模式下运行:

version: '3'
services:
svc1:
build: .
entrypoint:
- flask
- run
- --host=0.0.0.0
environment:
FLASK_DEBUG: 1
FLASK_APP: __init__.py
ports: ['5000:5000']
volumes: ['./app:/app']

在主文件夹中,您可以使用 docker-compose up --build -d 在 Debug模式下运行应用程序,然后导航到 localhost:5000,它会返回“hello world”。

但是,如果您使用 docker build -t exampleapi 构建镜像并运行它,它会提示:

File "/app/init.py", line 3, in module

from .config import config

ImportError: attempted relative import with no known parent package

最佳答案

如上所述here ,为了使相对导入工作,更简单的选择之一是将模块的全点名称指定为 Gunicorn,如下所示:

app.__init__.create_app()

实现此功能的其他选项包括:

  • 将相对导入更改为类似 from mymodule import as_int 的形式。仅当您的模块名称是唯一的时,这才有效。否则,您可以:

  • 从 mypackage.mymodule import as_int

关于python - docker中的 flask : different relative import in Dockerfile build and docker-compose,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52819262/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com