Динамически создавать подпакет - PullRequest
2 голосов
/ 23 июня 2011

Можно ли создать пакет динамически, например:

subpackage = create_subpackage(package_name, package_path)

Пакет должен быть связан с физическим путем, чтобы через него можно было импортировать модули из этого пути.

Цель состоит в том, чтобы иметь возможность иметь подпакеты, которые не являются подкаталогами их родительского пакета.

например

main_package/
   __init__.py

sub_package/
   __init__.py
   some_module.py

Содержимое main_package/__init__.py:

sub_package = create_subpackage("sub_package", "/a/path/to/sub_package")
globals()["sub_package"] = sub_package

Содержание some_random_script.py

from main_package.sub_package import some_module

1 Ответ

1 голос
/ 23 июня 2011

Хотя это не даст вам именно тот макет, который вы запрашиваете, это может помочь: http://docs.python.org/tutorial/modules.html#packages-in-multiple-directories

По сути, каждый пакет имеет атрибут __path__, который содержит список мест для поиска подмодулей.И вы можете изменить его по своему вкусу.

например,

main_package/__init__.py:

    __path__ += ['/tmp/some/other/path/']

/tmp/some/other/path/sub_package/__init__.py:

    value = 42

test.py:

    from main_package.sub_package import value
    print value

Если это не сработает, вы можете прочитать о хуках импорта , все-мощный (и соответственно сложный) способ изменить поведение импорта Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...