У меня есть структура проекта следующим образом:
/src
__init__.py
manage.py
В __init__.py у меня есть переменная app, объявленная как app = Flask(__name__).
При попытке импортировать переменную app в manage.py с помощью from src import app я получаю ошибку ImportError: cannot import name 'app' from 'src' (unknown location).
Читая другие сообщения, кажется, что общепринято использовать from . import app, что дает ImportError: attempted relative import with no known parent package.
Как я могу это решить?
Обновлено:
Меня продолжают просить предоставить файл __init__.py. Вот полное содержимое обоих файлов:
# src/__init__.py
from flask import Flask
app = Flask(__name__)
# manage.py
from src import app
Отслеживание ошибки выглядит следующим образом:
Traceback (most recent call last):
File "---\Project\manage.py", line 1, in <module>
from src import app
ImportError: cannot import name 'app' from 'src' (unknown location)
ОКОНЧАТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: теперь это работает. Понятия не имею, почему; ничего не изменилось, но вдруг заработало. Прохладный.
@JohnGordon Единственная важная строка — from flask import Flask. Тот же результат будет получен при удалении всего остального кода.
Вы установили свой проект в виде пакета?
@EAW У меня нет. Судя по тому, что я читаю, это, похоже, повлечет за собой написание setup.py или pyproject.toml для пакета, но я не знаю, как это сделать. Если это действительно работает, будем признательны за дальнейшее объяснение!
Вы можете импортировать только из пакета, а не из отдельного скрипта, поскольку Python должен знать, где найти нужный импорт. См. flask.palletsprojects.com/en/3.0.x/patterns/packages в документации flask для получения информации, которая поможет вам начать работу.
В нынешнем виде ваш код должен работать нормально. Если это не так, то есть что-то еще, о чем вы здесь не упомянули. Пожалуйста, включите полную обратную связь, чтобы мы могли вам помочь.
@BcK Я включил обратную трассировку.
Боже мой, теперь это работает. Я понятия не имею, что изменилось или что-то изменилось, но теперь это работает. Спасибо за вашу помощь!






вы можете просто импортировать вот так:
from src import app
но не забудьте поставить перед from .src import * в своем __init__.py
.
├── src
│ └── __init.py__
└── manage.py
источник/__init__.py
test_var = 5
менеджер.py
from src import test_var
print(test_var)
тест
python3 manage.py
5
Если я правильно понимаю, вы говорите, что добавление from .src import * в файл src/__init__ должно решить эту проблему? Я только что попробовал это вместе с from src import * и, похоже, не получил другого результата.
Вы тестировали «из приложения импорта src»? Можешь поделиться своим __init__.py?
Я только что добавил полное содержимое обоих файлов.
Покажите нам содержимое
__init__.py.