ImportError - попытка относительного импорта без известного родительского пакета - PullRequest
5 голосов
/ 07 марта 2019

Похоже, что это известная проблема, и я не единственный, кто сталкивается с этой проблемой. Но ни одна из прочитанных тем 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

Это работает лучше, но я действительно чувствую, что делаю что-то не так.

Каждый совет или помощь будут очень полезны.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...