python entry points 예

7784 단어 python
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:
영현 의 블 로그 소개 Stevedore:  http://ju.outofmemory.cn/entry/156745
opensatck 커 뮤 니 티 소개 Stevedore  http://blog.csdn.net/lynn_kong/article/details/9704413
튜 토리 얼:  http://docs.openstack.org/developer/stevedore/tutorial/index.html 
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 를 가 져 와 야 작업 할 수 있 습 니 다. 그렇지 않 으 면 일부 소스 코드 를 포장 할 수 없습니다. 
https://github.com/openstack/stevedore/tree/master/doc/source/tutorial
http://blog.oddbit.com/2014/09/27/integrating-custom-code-with-n/
pbr 를 가 져 오지 않 아 도 되 고 연구 가 필요 합 니 다.

좋은 웹페이지 즐겨찾기