动态创建子包
有没有办法动态创建一个包,类似于:
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的导入行为。