Похоже, что это известная проблема, и я не единственный, кто сталкивается с этой проблемой. Но ни одна из прочитанных тем StackOverflow мне не помогла.
Итак, вот дерево моей папки:
.
├── Dockerfile
├── app
│ ├── __init__.py
│ ├── app.py
│ ├── config.py
│ ├── controllers
│ │ └── home.py
│ ├── models.py
│ └── views
│ └── home.py
├── database.conf
├── docker-compose.yml
├── jarvis.conf
└── requirements.txt
Как видите, я пытался докернизировать свое приложение.
Давайте посмотрим на мой Dockerfile и docker-compose.yml
Dockerfile:
FROM python:3.6.8-alpine
LABEL maintainer="Jordane * <*>"
LABEL version="1.0.0"
RUN apk add build-base postgresql-dev
RUN pip install --upgrade pip
COPY requirements.txt /
RUN pip install -r requirements.txt
COPY app/ /app
WORKDIR /app
CMD ["gunicorn", "-w 1", "app:app", "-b", "0.0.0.0:3000"]
докер-compose.yml:
version: '3.5'
services:
db:
container_name: postgres
image: postgres:11.2-alpine
env_file: database.conf
ports:
- 5432:5432
volumes:
- dbdata:/var/lib/postgresql/data
web:
build: .
container_name: flask
restart: always
env_file:
- jarvis.conf
- database.conf
environment:
- PYTHONDONTWRITEBYTECODE=1
ports:
- 6876:3000
volumes:
- ./app/:/app
depends_on:
- db
volumes:
dbdata:
Вот начало моей беды, я думаю
Я написал это __ init__.py:
from flask import Flask
import flask_sqlalchemy
from .models import db
from . import config
def create_app():
flask_app = Flask(__name__)
flask_app.config['SQLALCHEMY_DATABASE_URI']= config.DB_CONN_URI
flask_app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
flask_app.app_context().push()
db.init_app(flask_app)
db.create_all()
return flask_app
и как вы видели выше в моем Dockerfile Я запускаю свое приложение с gunicorn и запускаю приложение.
app.py:
""" Jarvis slackBot v1.0 (api) """
__author__ = "titus"
from flask import request, jsonify
from . import create_app
from .models import User, db
from views.home import home_bp
from loguru import logger
app = create_app()
# logger.add("app.log", rotation="500 MB")
app.register_blueprint(home_bp, url_prefix='/home')
А вот и ошибка:
flask | from . import create_app
flask | ImportError: attempted relative import with no known parent package
Я следовал этому уроку, чтобы помочь мне: https://medium.com/@hmajid2301/implementing-sqlalchemy-with-docker-cb223a8296de
Так что это должно работать ...
Если я заменю:
from . import create_app
from __init__ import create_app
from .models import User, db
от from models import User, db
from .models import db
от from models import db
from . import config
import config
Это работает лучше, но я действительно чувствую, что делаю что-то не так.
Каждый совет или помощь будут очень полезны.
Спасибо