Я работаю над личным проектом, это моя структура каталогов:
app/
-- function/
-- -- run.py
-- constants.py
У меня есть некоторые переменные, определенные в constants.py, и я хотел бы импортировать их и использовать в run.py.
Я пробовал следующие подходы, оба, похоже, потерпели неудачу:
from ..constants import VARIABLE
Этот бросил ImportError: attempted relative import with no known parent package
from app.constants import VARIABLE
Этот бросил ModuleNotFoundError: No module named 'app'
Я хочу иметь возможность читать VARIABLE, который был определен в constants.py, в run.py и использовать его там.
Что я должен делать? Я не ищу обходной путь, я хочу что-то, что я могу воспроизвести в нескольких разных проектах.
Находится ли каталог app в вашем sys.path? Если это так, просто используйте from constants import VARIABLE
Все в модулях становится проще, когда вы перестаете думать об импорте из файлов. Вы импортируете из модулей, и вам нужно узнать, как модули определяются из файлов.
В частности, run.py не предназначен для определения модуля с именем app.function.run; это скрипт, который находится в том же каталоге, что и пакет app.function.
@dinhanhx Включение пустого файла __init__.py в каждый каталог и подкаталог по-прежнему приводило к тем же ошибкам.






sys.path.append("module_path")
# importing module
import sys
# appending a path
sys.path.append('articles')
# importing required module
import gfg
from gfg import GFG
# accessing its content
GFG.method_in()
gfg.method_out()
См. как-импортировать-модуль-python-с-данным-полным-путем :)
Вы можете сделать модуль своего каталога app/, создав пустое имя файла __init__.py в каталоге app/. Файл __init__.py сообщает интерпретатору Python, что это модуль.
app/
├── __init__.py
├── constants.py
└── functions/
└── run.py
Теперь вы можете легко импортировать переменные из constants.py в run.py с помощью
from app.constants import VARIABLE_NAME
Примечание (это будет полезно, когда ваш проект будет расти): вы также можете определить __init__.py в каталоге functions/, чтобы он стал подмодулем каталога app/, чтобы вы могли импортировать содержимое каталога function/ в другие части проекта, это поможет вам легко управлять зависимостью в будущем.
functions/ в качестве подмодуля будет следующимapp/
├── __init__.py
├── constants.py
└── functions/
├── __init__.py
└── run.py
Вы можете узнать больше о модулях в официальной документации по Python Python Docs для модулей.
В каждом каталоге (включая подкаталог) есть
__init__.py?