动态创建子包

3 投票
1 回答
1077 浏览
提问于 2025-04-16 20:07

有没有办法动态创建一个包,类似于:

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 个回答

3

虽然这可能无法完全满足你想要的布局,但这可能会对你有所帮助: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的导入行为。

撰写回答