Я разрабатываю пакет с файловой структурой, подобной следующей:
test.py
package/
__init__.py
foo_module.py
example_module.py
Если я вызываю import package
в test.py, я хочу, чтобы модуль пакета выглядел примерно так:
>>> vars(package)
mapping_proxy({foo: <function foo at 0x…}, {example: <function example at 0x…})
Другими словами, я хочу, чтобы члены всех модулей в package
находились в пространстве имен package
, и я не хочу, чтобы сами модули находились в пространстве имен. package
не является дополнительным пакетом.
Скажем, мои файлы выглядят так:
foo_module.py:
def foo(bar):
return bar
example_module.py:
def example(arg):
return foo(arg)
test.py:
print(example('derp'))
Как структурировать операторы импорта в test.py, example_module.py и __init__.py для работы вне каталога пакета (т.е. test.py) и внутри самого пакета (т.е. foo_module.py и example_module.py)? Все, что я пробую, дает Parent module '' not loaded, cannot perform relative import
или ImportError: No module named 'module_name'
.
Кроме того, в качестве примечания (согласно PEP 8): «Относительный импорт для импорта внутри пакета крайне не рекомендуется. Всегда используйте абсолютный путь к пакету для всего импорта. Даже сейчас, когда PEP 328 полностью реализован в Python 2.5, его стиль явного относительного импорта активно не приветствуется; абсолютный импорт более переносим и обычно более читабелен ".
Я использую Python 3.3.