Импорт переменных из одного файла в другой в Python

Я работаю над личным проектом, это моя структура каталогов:

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 и использовать его там.

Что я должен делать? Я не ищу обходной путь, я хочу что-то, что я могу воспроизвести в нескольких разных проектах.

В каждом каталоге (включая подкаталог) есть __init__.py?

dinhanhx 24.06.2023 15:51

Находится ли каталог app в вашем sys.path? Если это так, просто используйте from constants import VARIABLE

Lecdi 24.06.2023 15:56

Все в модулях становится проще, когда вы перестаете думать об импорте из файлов. Вы импортируете из модулей, и вам нужно узнать, как модули определяются из файлов.

chepner 24.06.2023 16:13

В частности, run.py не предназначен для определения модуля с именем app.function.run; это скрипт, который находится в том же каталоге, что и пакет app.function.

chepner 24.06.2023 16:15

@dinhanhx Включение пустого файла __init__.py в каждый каталог и подкаталог по-прежнему приводило к тем же ошибкам.

Arunav 25.06.2023 07:03
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
5
57
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

  1. Использование функции sys.path.append() ИЛИ
  2. Использование пакета importlib ИЛИ
  3. Использование класса SourceFileLoader

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 для модулей.

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