Импорт переменной из пакета __init__ в Python

У меня есть структура проекта следующим образом:

/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)

ОКОНЧАТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: теперь это работает. Понятия не имею, почему; ничего не изменилось, но вдруг заработало. Прохладный.

Покажите нам содержимое __init__.py.

John Gordon 22.05.2024 05:05

@JohnGordon Единственная важная строка — from flask import Flask. Тот же результат будет получен при удалении всего остального кода.

TheCosmicAspect 22.05.2024 05:09

Вы установили свой проект в виде пакета?

EAW 22.05.2024 08:08

@EAW У меня нет. Судя по тому, что я читаю, это, похоже, повлечет за собой написание setup.py или pyproject.toml для пакета, но я не знаю, как это сделать. Если это действительно работает, будем признательны за дальнейшее объяснение!

TheCosmicAspect 22.05.2024 17:33

Вы можете импортировать только из пакета, а не из отдельного скрипта, поскольку Python должен знать, где найти нужный импорт. См. flask.palletsprojects.com/en/3.0.x/patterns/packages в документации flask для получения информации, которая поможет вам начать работу.

EAW 22.05.2024 19:15

В нынешнем виде ваш код должен работать нормально. Если это не так, то есть что-то еще, о чем вы здесь не упомянули. Пожалуйста, включите полную обратную связь, чтобы мы могли вам помочь.

BcK 23.05.2024 14:24

@BcK Я включил обратную трассировку.

TheCosmicAspect 31.05.2024 22:00

Боже мой, теперь это работает. Я понятия не имею, что изменилось или что-то изменилось, но теперь это работает. Спасибо за вашу помощь!

TheCosmicAspect 31.05.2024 22:34
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
8
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вы можете просто импортировать вот так:

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 * и, похоже, не получил другого результата.

TheCosmicAspect 22.05.2024 17:31

Вы тестировали «из приложения импорта src»? Можешь поделиться своим __init__.py?

Lucas D 23.05.2024 18:49

Я только что добавил полное содержимое обоих файлов.

TheCosmicAspect 31.05.2024 22:02

Другие вопросы по теме