python entry_python entry points 例子

$ mkdir entry_test; cd entry_test; git init

$ mkdir -p mypackage/api/v1/

$ touch mypackage/__init__.py; touch mypackage/api/__init__.py; touch mypackage/api/v1/__init__.py;

$ tree mypackage

.

├── mypackage

│ ├── api

│ │ ├── __init__.py

│ │ └── v1

│ │ ├── databases.py

│ │ ├── hello.py

│ │ ├── __init__.py

│ ├── __init__.py

├── setup.cfg

└── setup.py

$ cat mypackage/api/v1/databases.py

defmain():print "this is databases main"

$ cat mypackage/api/v1/hello.py

defmain():print "this is hello main"

$ cat setup.cfg

[metadata]

name = mypackage

version = 12.0.0

summary = Cloud computing fabric controller

[files]

packages =

mypackage

[entry_points]

mypackage.api.v1 =

databases = mypackage.api.v1.databases:main

hello = mypackage.api.v1.hello:main

[wheel]

universal = 1

[pbr]

autodoc_index_modules = 0

warnerrors = true

$ cat setup.py

importsetuptools#In python < 2.7.4, a lazy loading of package `pbr` will break#setuptools if some other modules registered functions in `atexit`.#solution from: http://bugs.python.org/issue15881#msg170215

setuptools.setup(

name='mypackage',

packages=['mypackage'],

package_dir={'mypackage': 'mypackage'},

setup_requires=['pbr'],

pbr=True,

entry_points={'mypackage.api.v1':['databases=mypackage.api.v1.databases:main','hello=mypackage.api.v1.hello:main',

],

}

)

调用方法1:

from stevedore importextensiondeftest_detect_plugins():

em= extension.ExtensionManager('mypackage.api.v1')

names=sorted(em.names())printnames

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]

调用方法2:

importpkg_resourcesdef run_entry_point(*argv):

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()printplugin

type(plugin)

plugin(*argv)

调用方法3:

from pkg_resources importload_entry_point

load_entry_point('mypackage', 'mypackage.api.v1', 'database')()

在我的test 例子中需要导入pbr 才能工作,否则有些源代码打包不了。

没有导入pbr, 也可以, 需要研究。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值