당신은 setuptools에로, 다른 패키지 내부에 설치하는 이 지원되지 않습니다 것을 할 수 없습니다.
대신 entry points을 사용하고 싶습니다. origmodule
은 특정 키의 진입 점으로 등록 된 것을 찾아야하며 extension
모듈은 해당 키에 대해 자체 등록해야합니다.
귀하의 확장은 확장 점을 등록합니다
entry_points={
'some.opaque.string.unique.to.origmodule':
['my_extension = my.extension.package:some.entry.point', ]
}
하는 당신의 origmodule
다음 pkg_resources
을 요청하여 발견 할 수 있습니다 :
import pkg_resources
for entrypoint in pkg_resources.iter_entry_points(group='some.opaque.string.unique.to.origmodule'):
extension = entrypoint.load()
가 예로
Babel project를 살펴 보자. Babel은 파일에서 번역 가능한 텍스트를 추출 할 수 있습니다. Python 소스 코드에서이 작업을 수행하는 방법을 알고 있지만 다른 형식에서 이러한 텍스트를 추출 할 수있는 확장을 지원합니다.
이러한 추출 방법은 확장 점으로 등록 할 수 있습니다. Babel은 이것을 Writing Extraction Methods 섹션에서 설명합니다. 해당 메시지 코드 추출 loads those entry points 때 추출 된 텍스트 :
GROUP_NAME = 'babel.extractors'
# ...
for entry_point in working_set.iter_entry_points(GROUP_NAME,
method):
func = entry_point.load(require=True)
break
Mako templating language 용품 등 플러그; actual implementation를 가리키는 것이 registers the entry point :`some.opaque.string.unique.to.origmodule`는 내가 분명하지 않다
[babel.extractors]
mako = mako.ext.babelplugin:extract
def extract(fileobj, keywords, comment_tags, options):
# ...
입니까? 확장 기능을 말하도록 선택한 이름입니까, 제 3 자 또는 다른 모듈이 그 이름으로 등록 할 수 있습니까? 둘째, 그렇다면이 이름이 내 응용 프로그램에 고유해야합니다. 예를 들어 다른 패키지가 같은 이름을 사용하는 경우 다른 패키지에서 내 확장 프로그램을 가져오고 가져 오겠습니까? –
예, 선택하는 이름 일뿐입니다. 불투명 한 문자열을 의미합니다. :-) 다른 패키지가 같은 이름을 사용하면 자연스럽게 동일한 엔트리 포인트를로드합니다. –
좋습니다. 감사합니다. 고마워요! –