Я разрабатываю пакет, который имеет структуру файла, похожую на следующее:
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'))
Как структурировать инструкции import в 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.