programing

Python의 진입점에 대해 설명하시겠습니까?

javaba 2022. 10. 26. 21:37
반응형

Python의 진입점에 대해 설명하시겠습니까?

Pylons와 Peak 페이지에 있는 계란 진입점에 대한 문서를 읽었는데 아직도 잘 모르겠어요.누가 설명 좀 해주시겠어요?

"엔트리 포인트"는 일반적으로 Python 패키지의 개발자 또는 사용자가 사용하기를 원하는 함수(또는 기타 호출 가능한 함수 유사 객체)입니다. 단, 호출 불가능한 객체는 (댓글에서 올바르게 지적된 바와 같이) 진입 포인트로 제공될 수 있습니다.

있는 는 「」입니다.console_scripts진입점 - 패키지를 설치하는 사용자가 명령줄 도구로 사용할 수 있는 기능을 가리킵니다.은 당신의 것은 your 에 들어갑니다.setup.py★★★★★★★★★★★★★★★★★★:

entry_points={
    'console_scripts': [
        'cursive = cursive.tools.cmd:cursive_command',
    ],
},

a i i금 배 i i i i i i i i i i i 。cursive.tools명령줄에서 실행할 수 있는 다음과 같은 "cursive" 명령어를 사용 가능하게 하고 싶었습니다.

$ cursive --help
usage: cursive ...

은 '입니다. ★★★★★★★★★★★★★★★★★,cursive_command in file function function 。cursive/tools/cmd.py뭇매를 맞다

def cursive_command():
    args = sys.argv[1:]
    if len(args) < 1:
        print "usage: ..."

명령줄에서 호출된 것으로 가정하고 사용자가 제공한 인수를 해석하고 명령어가 실행하도록 설계된 모든 작업을 수행합니다.

엔트리 포인트 사용의 좋은 예로서 패키지를 인스톨 합니다.Python 문서를 다른 형식으로 변환하기 위한 유용한 명령어 6개 같은 것을 인스톨 합니다.

EntryPoint는 파일 시스템 기반의 영구 객체 이름 등록 및 이름 기반의 직접 객체 Import 메커니즘(setuptools 패키지에 의해 구현됨)을 제공합니다.

Python 객체의 이름을 자유 형식 식별자와 연결합니다.따라서 동일한 Python 설치를 사용하고 식별자를 알고 있는 다른 코드는 개체가 정의된 위치에 관계없이 연결된 이름으로 개체에 액세스할 수 있습니다.연관된 이름은 Python 모듈에 존재하는 이름(예: 클래스 이름, 함수 또는 변수 이름)일 수 있습니다.엔트리 포인트메커니즘은 Import 가능한 한 이름이 무엇을 의미하는지 상관하지 않습니다.

예를 들어 함수(이름)와 완전 수식 이름 'myns.mypkg.mymodule'을 가진 가상의 파이썬 모듈을 사용합니다.

def the_function():
   "function whose name is 'the_function', in 'mymodule' module"
   print "hello from the_function"

진입점은 setup.py의 진입점 선언을 통해 등록됩니다.'my_ep_func'라는 진입점에 _함수를 등록하려면:

    entry_points = {
        'my_ep_group_id': [
            'my_ep_func = myns.mypkg.mymodule:the_function'
        ]
    },

예시와 같이 진입점은 그룹화되어 있습니다.그룹에 속하는 모든 진입점을 검색하기 위한 API가 있습니다(아래 예).

패키지 설치(즉, 'http setup.py install' 실행) 시 위의 선언은 setuptools에 의해 해석됩니다.그런 다음 구문 분석된 정보를 특수 파일에 씁니다.그런 다음 pkg_resources API(setuptools의 일부)를 사용하여 엔트리 포인트를 검색하고 관련 이름을 가진 개체에 액세스할 수 있습니다.

import pkg_resources

named_objects = {}
for ep in pkg_resources.iter_entry_points(group='my_ep_group_id'):
   named_objects.update({ep.name: ep.load()})

여기서 setuptools는 특수 파일에 기록된 진입점 정보를 읽습니다.pkg_resources.load()에 대한 호출로 엔트리 포인트를 찾아 모듈(myns.mypkg.mymodule)을 Import하고 정의된_함수를 취득했습니다.

그러면 _함수를 호출하는 것은 간단해집니다.

>>> named_objects['my_ep_func']()
hello from the_function

따라서 처음에는 조금 이해하기 어렵지만 실제로 진입점 메커니즘은 사용하기 매우 간단합니다.플러그형 Python 소프트웨어 개발에 유용한 도구를 제공합니다.

추상적인 관점에서 보면 진입점은 특정 인터페이스를 구현하는 Python 콜러블의 시스템 전체 레지스트리를 만드는 데 사용됩니다.pkg_resources에는 특정 패키지에 의해 애드버타이즈되는 엔트리 포인트를 확인하는 API와 특정 엔트리 포인트를 애드버타이즈하는 패키지가 있습니다.

진입점은 한 패키지가 다른 패키지에 있는 플러그인을 사용할 수 있도록 하는 데 유용합니다.예를 들어 Ian Bicking의 붙여넣기 프로젝트는 진입점을 광범위하게 사용합니다.이 경우 진입점을 사용하여 WSGI 애플리케이션 팩토리를 애드버타이즈하는 패키지를 작성할 수 있습니다.paste.app_factory.

진입점의 또 다른 용도는 일부 플러그인 기능을 제공하는 시스템의 모든 패키지를 열거하는 것입니다.TurboGears 웹 프레임워크는 엔트리 포인트를 사용하여 설치 및 사용 가능한 템플리트 라이브러리를 검색합니다.

언급URL : https://stackoverflow.com/questions/774824/explain-python-entry-points

반응형