Явный относительный импорт в пакете без использования ключевого слова из - PullRequest
0 голосов
/ 11 декабря 2018

У меня следующая структура пакета:

mypkg
├── mymodule
│   ├── __init__.py
│   └── ...
├── mylib.py
└── script.py

В script.py я могу сделать from .mymodule import X и from .mylib import Y и отлично работает как для Python 2, так и для Python 3.

В Python 2 я могу сделать import mymodule и import mylib, и он отлично работает, а потом я могу сделать mymodule.X или mylib.Y.

В Python 3 я не могу сделать import .mymodule или import .mylib (синтаксическая ошибка), и если я удаляю начальную точку, я получаю: ModuleNotFoundError: No module named 'mymodule' и ModuleNotFoundError: No module named 'mylib'.

Прочитав этот вопрос Я понимаю, что мне нужна начальная точка, но почемуя получаю синтаксическую ошибку?Как я могу заставить эти импорты работать как для Python 2, так и для 3?

Обновление : Для дальнейшего использования моя структура пакета теперь:

mypkg
├── __init__.py
├── mymodule
│   ├── __init__.py
│   └── ...
├── mylib.py
└── script.py

1 Ответ

0 голосов
/ 11 декабря 2018

Вам необходимо

from . import mymodule

и

from . import mylib

Явный относительный импорт должен использовать from синтаксис.Целью разработки является то, что все, что идет после import в import ... или from ... import ..., является допустимым выражением для доступа к импортированной вещи после импорта, а .mymodule не является допустимым выражением.

...