python entry points 例子
2015-07-06 16:10
615 查看
pbr的介绍不多, http://ju.outofmemory.cn/entry/156745
$ 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
$ cat mypackage/api/v1/hello.py
$ cat setup.cfg
$ cat setup.py
调用方法1:
令贤的blog介绍 stevedore: http://blog.csdn.net/lynn_kong/article/details/9704413
opensatck 社区介绍stevedore http://docs.openstack.org/developer/stevedore/tutorial/index.html
教程: https://github.com/openstack/stevedore/tree/master/doc/source/tutorial
调用方法2:
调用方法3:
在我的test 例子中需要导入pbr 才能工作,否则有些源代码打包不了。
http://blog.oddbit.com/2014/09/27/integrating-custom-code-with-n/
https://github.com/larsks/demo_nova_hooks
没有导入pbr, 也可以, 需要研究。
$ 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
def main(): print "this is databases main"
$ cat mypackage/api/v1/hello.py
def main(): 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
import setuptools # 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:
令贤的blog介绍 stevedore: http://blog.csdn.net/lynn_kong/article/details/9704413
opensatck 社区介绍stevedore http://docs.openstack.org/developer/stevedore/tutorial/index.html
教程: https://github.com/openstack/stevedore/tree/master/doc/source/tutorial
from stevedore import extension def test_detect_plugins(): em = extension.ExtensionManager('mypackage.api.v1') names = sorted(em.names()) print names 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:
import pkg_resources def 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() print plugin type(plugin) plugin(*argv)
调用方法3:
from pkg_resources import load_entry_point load_entry_point('mypackage', 'mypackage.api.v1', 'database')()
在我的test 例子中需要导入pbr 才能工作,否则有些源代码打包不了。
http://blog.oddbit.com/2014/09/27/integrating-custom-code-with-n/
https://github.com/larsks/demo_nova_hooks
没有导入pbr, 也可以, 需要研究。
相关文章推荐
- python的字典
- qemu guest agent修改密码(python)
- 浅谈 Python 的 with 语句
- 用PyInstaller把Python代码打包成单个独立的exe可执行文件
- 理解Python的With语句
- Python 学习 --- 基础知识
- 判断Python输入是否为数字
- Python实现图像几何变换
- Python统计日志中每个IP出现次数的方法
- python BinaryTree
- python统计日志ip访问数的方法
- python检查指定文件是否存在的方法
- vim的python代码检测工具
- windows上安装numpy和scipy
- 安装python至windows
- Python单例模式的4种实现方法
- Python - 属性访问
- python代码运行显示PC参数
- Python正则表达式
- XGBoost:在Python中使用XGBoost