Предположим, у меня есть следующая структура программы:
.
├── main.py
└── mypack
├── __init__.py
└── mymod.py
В пакете mypack
можно импортировать объекты в (под) модулях, используя синтаксис: from .mymod import f
mypack/__init__.py
:
from .mymod import f
print(f'Hello: __name__: {__name__}, __package__: {__package__}, __file__: {__file__}')
Однако, если я попытаюсь импортировать полный (под-) модуль, я получаю следующую синтаксическую ошибку:
import .mymod
Traceback (most recent call last):
File "main.py", line 1, in <module>
import mypack
File "/Users/nlykkei/python-demo/mypack/__init__.py", line 1
import .mymod
^
SyntaxError: invalid syntax
Кроме того, если я попытаюсь импортировать модуль с использованием не относительного синтаксиса, это не удастся:
import mymod
Traceback (most recent call last):
File "main.py", line 1, in <module>
import mypack
File "/Users/nlykkei/python-demo/mypack/__init__.py", line 1, in <module>
import mymod
ModuleNotFoundError: No module named 'mymod'
Как я могу импортировать (под-) модуль в файл __init__.py
пакета? В частности, я хочу импортировать только объект модуля и не все содержащиеся в нем объекты: from .mymod import *
.
Вывод программы :
$ python3 main.py
Hello: __name__: mypack.mymod, __package__: mypack, __file__: /python-demo/mypack/mymod.py
Hello: __name__: mypack, __package__: mypack, __file__: /python-demo/mypack/__init__.py
Hello: __name__: __main__, __package__: None, __file__: main.py