Как исправить ошибку ImportError: попытка относительного импорта без известного родительского пакета

Я создаю пакет python, который следует структуре:

project
├── package
│   ├── __init__.py
│   ├── __main__.py
│   └── subpackage01
│       ├── functions01.py
│       ├── __init.py__
│       └── subpackage02
│           ├── functions02.py
│           ├── __init__.py
├── requirements.txt
├── setup.py

В __main__.py у меня есть from .subpackage01.functions01 import foo, что дает мне ошибку ImportError: attempted relative import with no known parent package.

Если я удалю точку перед subpackage01, она будет работать, но перестанет работать в моем пакете pypi. Удаление точки, сборка пакета и его загрузка дают мне ошибку ModuleNotFoundError: No module named 'subpackage01'.

Я не могу понять почему, поскольку в functions01.py у меня есть относительный импорт для subpackage02, который работает без проблем. Также я не могу понять, почему это работает, когда пакет собран, а не в локальной среде разработки.


person Horus    schedule 06.06.2019    source источник
comment
Правильно ли написано __init__.py в каталоге subpackage01?   -  person slayer    schedule 06.06.2019


Ответы (1)


Попробуйте from subpackage01.functions01 import foo это небольшое различие, удалив начальную точку из subpackage01.

person slayer    schedule 06.06.2019
comment
Но если я это сделаю, после сборки пакета для pipy он не сработает - person Horus; 06.06.2019