开发者

Dynamically create subpackage

Is it possible开发者_开发知识库 to create a package dynamically, something like:

subpackage = create_subpackage(package_name, package_path)

The package should be associated with a physical path so that modules from that path can be imported through it.

The purpose is to be able to have subpackages that are not subdirectories of their parent package.

e.g.

main_package/
   __init__.py

sub_package/
   __init__.py
   some_module.py

Contents of main_package/__init__.py:

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

Contents of some_random_script.py

from main_package.sub_package import some_module


While this won't give you exactly the layout you're asking for, this might help: http://docs.python.org/tutorial/modules.html#packages-in-multiple-directories

Basically, each package has a __path__ attribute that contains a list of places to search for submodules. And you can modify it to your liking.

e.g.

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

If that doesn't cut it, you can go read up on import hooks, the all-powerful (and correspondingly complicated) way to modify Python's import behavior.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜