Настройка проблемы
.
└── my_app
├── main.py
└── my_package
├── __init__.py
├── foo_file.py
└── foobar_file.py
с файлами, содержащими следующее:
my_app/main.py
:
import my_package
print(f'foobar_var is {my_package.foobar_var}')
my_app/__init__.py
:
from .foobar_file import foobar_var
my_app/my_package/foo_file.py
:
foo_var='foo'
my_app/my_package/foobar_file.py
foo_var = 'foo'
foobar_var=foo_var + 'bar'
При запуске python3 my_app/main.py
я получаю ожидаемый результат:
foobar_var is foobar
Вы можете воссоздать эту рабочую ситуацию с помощью следующей оболочки:
mkdir -p my_app my_app/my_package
echo "import my_package\nprint(f'foobar_var is {my_package.foobar_var}')" > my_app/main.py
echo "foo_var = 'foo'" > my_app/my_package/foo_file.py
echo "foo_var = 'foo'\nfoobar_var=foo_var + 'bar'" > my_app/my_package/foobar_file.py
echo "from .foobar_file import foobar_var" > my_app/my_package/__init__.py
Что я хочу
Теперь вместо определения foo_var
в foobar_file.py
Я бы хотел импортировать его из foo_file.py
. Поскольку это учебный проект для меня, я хотел бы сделать его наиболее pythoni c, элегантным и перспективным способом, насколько это возможно.
Что я пробовал
Я пробовал несколько вещей (и не удалось), в том числе:
из foo_file import foo_var
Изменение my_app/my_package/foobar_file.py
на:
from foo_file import foo_var
foobar_var=foo_var + 'bar'
приводит к ошибке:
ModuleNotFoundError: No module named 'foo_file'
от. import foo_var
Изменение my_app/my_package/foobar_file.py
на:
from . import foo_var
foobar_var=foo_var + 'bar'
приводит к ошибке:
ImportError: cannot import name 'foo_var' from 'my_package'
Документация
Я прочитал это (очень хорошо написано) статья о модулях и пакетах на реальных python .com. Я все еще не мог сделать это.