Как импортировать подмодуль в __init__.py пакета в Python3? - PullRequest
0 голосов
/ 05 мая 2020

Предположим, у меня есть следующая структура программы:

.
├── 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

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Не уверен, что полностью понял вопрос, но возможно:

from . import mymod
0 голосов
/ 05 мая 2020

Проверьте свой __init__.py файл

Ошибка:

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'

указано, что вы не импортировали .mymod, а mymod

...