动态创建子包

时间:2011-06-23 00:02:05

标签: python package

是否可以动态创建包,如:

subpackage = create_subpackage(package_name, package_path)

包应该与物理路径相关联,以便可以通过它导入该路径中的模块。

目的是能够拥有不是其父包的子目录的子包。

e.g。

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 个答案:

答案 0 :(得分:1)

虽然这不会为您提供所需的布局,但这可能有所帮助:http://docs.python.org/tutorial/modules.html#packages-in-multiple-directories

基本上,每个包都有一个__path__属性,其中包含 列表,用于搜索子模块。你可以根据自己的喜好进行修改。

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

如果没有删除它,你可以阅读import hooks,这是修改Python导入行为的全能(并且相应复杂)方式。