管理python模块的包。
modkit的Python项目详细描述
改装套件
管理python模块的包
安装
# released version pip install modkit # latest version pip intall git+https://github.com/pwwanbg/modkit
用法
允许导入特定名称,即使使用from ... import *
mymodule.py
:
frommodkitimportModkitmodkit=Modkit()modkit.exports('a','b')a=1b=2c=3
尝试导入此模块:
importmymoduleasmmmm.a# 1mm.b# 2mm.c# NameNotImportable
frommymoduleimport*a# 1b# 2c# NameError# NameNotImportablefrommymoduleimportc
禁止使用某些名称
mymodule.py
:
frommodkitimportModkitmodkit=Modkit()modkit.ban('a')a=1
importmymoduleasmmmm.a# NameBannedFromImport# NameBannedFromImportfrommymoduleimporta
别名
mymodule.py
:
frommodkitimportModkitmodkit=Modkit()modkit.alias('some_internal_wired_name','a')some_internal_wired_name=1
frommymoduleimportaa# 1
动态导入名称
mymodule.py
:
frommodkitimportModkitmodkit=Modkit()defdelegate(name):ifname=='a':return1ifname=='b':return2ifname=='c':returnlambda:3modkit.delegate(delegate)
frommymoduleimporta,b,ca# 1b# 2c()# 3# NameBannedFromImportfrommymoduleimportdelegate# if you want to reuse it# mymodule.modkit.unban('delegate')
modkit
具有名为_modkit_delegate
的保留委托函数。在模块中定义了这个函数后,就不必调用modkit.delegate
mymodule.py
importmodkitmodkit.Modkit()def_modkit_delegate(name):ifname=='a':return1ifname=='b':return2ifname=='c':returnlambda:3# nothing needs to do
然后您可以从mymodule导入a、b和c:
frommymoduleimporta,b,c
基于当前模块生成新模块
mymodule.py
importmodkitmodkit.Modkit()A=1def_modkit_call(module,a):setattr(module,'A',2)returnmodule
importmymoduleA# 1mymodule2=mymodule(2)mymodule2.A# 2frommymodule2importAA# 2frommymoduleimportAA# 1