Почему python не видит модуль хотя __init__.py есть?

Структура проекта (Flask):
blog:
    client:
         *files
    server:
      blog_app:
             __init__.py
             *files
      test:
            test1.py

Нужно из под test1.py обратиться к переменной app заданной в __init__.py, согласно документации
В test1.py прописано:
from blog_app import app
__init__.py должен определять blog_app как модуль, но этого не происходит.
__init__.py содержит:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

from .config import Config

app = Flask(__name__)
app.config.from_object(Config)
app.debug = True
db = SQLAlchemy(app)
migrate = Migrate(app, db)

from blog_app import main, models

В результате ошибка:
ModuleNotFoundError: No module named 'blog_app'
  • Вопрос задан
  • 1405 просмотров
Решения вопроса 1
trapwalker
@trapwalker
Программист, энтузиаст
Питон просто не знает, что каталоге server (а для test1.py это "..") можно искать модули и пакеты.
Сделайте так:
sys.path.append('..') в test1.py и в нём можно будет импортировать ваш пакет, если запускаете вы прямо его (test1.py)

Питон при импорте ищет модули по путям, перечисленным в sys.path.
Один из вариантов решения этой проблемы для вас - это сделать норальный setup.py, а потом установить его в редактируемом режиме (pip install -e .).
Так папка, где лежит пакет, будет добавлена в sys.path и он будет импортироваться откуда угодно.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы