Сделать модуль подпакета python3 доступным для импорта в пространстве имен основного пакета - PullRequest
0 голосов
/ 24 октября 2018

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

mainpackage
├── __init__.py
└── subpackage
    ├── __init__.py
    └── module.py

Module.py содержит

def test():
    print("test called")

Использование python3 Я хочу сделать модуль module.py доступным для импорта в пространстве имен основного пакета,Пока мой файл mainpackage __init__.py выглядит следующим образом

from .subpackage import module

Я хотел бы иметь возможность звонить

import mainpackage.module

, но это выдает

ImportError: No module named 'mainpackage.module'

Простодля ясности я НЕ ищу импорт функции тестирования в пространство имен основного пакета - я хочу весь модуль.Это возможно ?Любая помощь будет высоко ценится.

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

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

import mainpackage.module

ищет модуль в подкаталоге mainpackage, а не влюбые другие (более глубокие) подкаталоги.

То, что вы пробовали в mainpackage\__init.py__, правильно.Ваш

from .subpackage import module 

сделает модуль доступным на уровне mainpackage.Если вы введете консоль IPython, то

import mainpackage
mainpackage.module

выдаст следующий вывод

<module 'mainpackage.subpackage.module' from 'your\path\mainpackage\subpackage\module.py'>

, но import mainpackage.module все равно не будет работать.Если вы теперь хотите использовать module в качестве экземпляра, вы должны использовать

from mainpackage import module

, что позволит вам использовать вашу функцию следующим образом

module.test
0 голосов
/ 24 октября 2018

Импортируйте его таким образом from mainpackage.subpackage import module и вам не нужно from .subpackage import module в файле инициализации

...