Skip to main content
 首页 » 编程设计

python之动态创建子包

2025年05月04日9kuangbin

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

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 

请您参考如下方法:

虽然这不会为您提供您所要求的确切布局,但这可能会有所帮助: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 

如果这还不行,您可以继续阅读 import hooks ,修改 Python 导入行为的全能(并且相应地复杂)方法。