名称空间控制和惰性导入机制

apipkg的Python项目详细描述


欢迎来到APIPKG!

使用apipkg,您可以控制python包的导出名称空间,并 大大减少用户的导入数量。 它是一个在cpython 2.7和3.4+上工作的small pure Python module, Jython和Pypy。它与python的help()系统配合得很好, 自定义导入程序(pep302)和通用命令行完成工具。

用法非常简单:您可以要求“apipkg”作为依赖项,或者 可以将~200行代码复制粘贴到项目中。

教程示例

下面是一个简单的mypkg包,它指定一个命名空间 并导出从不同模块导入的两个对象:

# mypkg/__init__.py
import apipkg
apipkg.initpkg(__name__, {
    'path': {
        'Class1': "_mypkg.somemodule:Class1",
        'clsattr': "_mypkg.othermodule:Class2.attr",
    }
}

包是用字典作为命名空间初始化的。

您需要用^{tt4}创建一个_mypkg包$ 以及包含各个类的othermodule.py_mypkg不是特别的-它完全是 普通python包。

命名空间词典包含name: value映射 其中该值可以是另一个命名空间字典或 指定导入位置的字符串。关于访问 将执行导入的命名空间属性:

>>> import mypkg
>>> mypkg.path
<ApiModule 'mypkg.path'>
>>> mypkg.path.Class1   # '_mypkg.somemodule' gets imported now
<class _mypkg.somemodule.Class1 at 0xb7d428fc>
>>> mypkg.path.clsattr  # '_mypkg.othermodule' gets imported now
4 # the value of _mypkg.othermodule.Class2.attr

mypkg.path命名空间及其两个条目是 访问时加载。这意味着:

  • 延迟加载-只加载实际需要的内容

  • 只需要导入根“mypkg”即可获取 访问完整的功能

  • 底层模块也可以访问,例如:

    from mypkg.sub import Class1
    

在您的套餐中包含apipkg

如果不想将apipkg依赖项添加到包中,则 可以将apipkg.py文件复制到您自己的包中, 例如上例中的_mypkg/apipkg.py。你 然后从新位置导入initpkg函数并 很好去。

反馈?

如果您有问题,欢迎使用

玩得开心, 霍尔格·克雷克尔

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java FloatingAction按钮与RecyclerView中的CardView重叠   java如何计算CardLayout中的卡数   从远程系统上传MySQL数据库并访问Java应用程序   java调用堆栈如何处理带或不带返回类型的递归?   Springboot中的java组计数聚集   java如何在javafx textarea中使用richtextfx   获取与Mockito相关的错误时出现Java问题   java如何将JaxRS响应转换为Wiremock响应   Hadoop集群java。net ConnectionException:连接被拒绝错误   java如何加载文件私有文件类型是pem   java在元空间中的提升和加载的类   如何将系统属性传递给从HTML启动的Java小程序   java如何从网页中获取值并在主类中使用它?安卓应用   java在春天,advisor和aspect之间有什么区别?   java如何检测文件是否已重命名?   java消息驱动Bean何时使用