【问题标题】:Dynamically create subpackage动态创建子包
【发布时间】:2011-06-23 10:19:20
【问题描述】:

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

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

【问题讨论】:

    标签: python package


    【解决方案1】:

    虽然这不会为您提供所需的布局,但这可能会有所帮助: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 导入行为的全能(且相应复杂)的方法。

    【讨论】:

      猜你喜欢
      • 2012-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-14
      • 2012-03-16
      • 2017-07-02
      相关资源
      最近更新 更多