python entry points 예
7784 단어 python
$ 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 를 가 져 오지 않 아 도 되 고 연구 가 필요 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.