python之entry points

python之entry points

  (2013-09-05 15:38:53)
标签: 

it

分类: python
entry points是什么呢?貌似就是一个package通过setuptools注册的一个外部可以直接调用的接口。例如:

在mypackage的setup.py里注册entry_points如下:
setup(                                                                                                            
      name='mypackage',                                                                                           
      entry_points={                                                                                          
            'mypackage.api.v1':[                                                                                 
                  'databases=mypackage.api.v1.databases:main',                                
                  ],                                                                                                
 
该setup()函数注册了一个entry point,属于mypackage.api.v1 group。
注意,如果多个其它不同的package利用mypacke.api.v1来注册entry point,那么我用mypackage.api.v1来访问entry point时,将会获取所有已注册过的entry point。

将该包install后,在本机上的任何程序可以利用以下几种方法调用该entry point
方法一:
使用pkg_resources类用调用
import pkg_resources
def run_entry_point(data):
    group = 'mypackage.api.v1'
    for entrypoint in pkg_resources.iter_entry_points(group=group):
        # Grab the function that is the actual plugin.
        plugin = entrypoint.load()
        plugin(data)
方法二:
from pkg_resources import load_entry_point
load_entry_point('mypackage', 'mypackage.api.v1', 'database')()
方法三:
利用stevedore
from stevedore import extension

def test_detect_plugins():
    em = extension.ExtensionManager('mypackage.api.v1')
    names = sorted(em.names())
    assert names == ['t1', 't2']
    em1 = extension.ExtensionManager('mypackage.api.v1')
    eps1 = [ext.plugin for ext in em1]  #plugin是被映射的函数,用于调用
    em1 = extension.ExtensionManager('mypackage.api.v1')
    eps1 = [ext.entry_point for ext in em1]
为什么需要entry point,直接用import调用不是一样吗?
如果从单个package安装中看,的确与import没什么两样,但是,如果你有一个工具,需要调用所有已安装package的某一类接口,你是一个一个去import还是用entry point比较方便呢?
当然是entry point了,将这一类的entry point注册到同一个group中,然后通过该group就可以调用所有的这类接口了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值