파이톤 바인딩, 어떻게 되는거야?
나는 비단뱀을 탐험하고 있다.나는 파이톤 바인딩이 궁금하다.Python에서 C 라이브러리에 접근할 수 있는 방법을 설명해줄 사람?
Python에서 C로 작성된 코드를 호출하는 방법에는 여러 가지가 있다.
첫째, 표준 라이브러리에 ctypes 모듈이 있다.동적 링크 라이브러리(윈도우즈에서 DLL, 공유 라이브러리)를 로드할 수 있음.so
(Linux) 및 이러한 라이브러리에서 직접 Pypython에서.그러한 도서관은 보통 C로 쓰여진다.
둘째, 만약의 경우CPython
Python/C API가 있다.다음과 같은 두 가지 방법으로 사용할 수 있다.
동적 링크 라이브러리는 다음과 같은 방법으로 C로 작성할 수 있다.CPython
모듈로 취급한다(Python 프로그램에서 가져올 수 있을 것이다).Python/C API를 통해 라이브러리는 C로 작성되지만 Python에서 호출 가능한 기능을 정의할 수 있다.API는 매우 강력하며, 모든 파이썬 데이터 유형을 조작하고 통역사의 내역에 접근할 수 있는 기능을 제공한다.
C API를 사용하는 두 번째 방법은 C로 작성된 프로그램에 Python을 내장하는 것이다.그러면 C 프로그램은 동적 링크 라이브러리 접근법에서와 같이 C로 작성된 내장 모듈을 만들고 C 기능을 노출시킬 수 있다.API는 또한 프로그램이 내장된 모듈을 가져와서 사용할 수 있는 스크립트를 실행할 수 있게 해준다.이것은 Python 기반 플러그인 시스템을 만드는 데 사용될 수 있다.
"빈딩"은 순수한 파이썬 라이브러리로 구현된다.ctypes
또는 Python/C API를 사용하는 동적 링크 라이브러리로 사용하십시오.두 번째 옵션은 때때로 "보일러 플레이트" 코드 또는 부스트 생성을 주의하여 작업을 더 쉽게 만드는 SWIG와 같은 도구와 함께 사용된다.Python/C API 위에 C++ API를 제공하여 C++ 코드와의 인터페이스가 용이하도록 하는 Python
자세한 내용:외부 기능 인터페이스
답은 간단하다. 파이톤(CPython) 통역기는 C로 작성되어 있고, 다른 C 라이브러리를 동적으로 호출할 수 있으며, 당신의 C 확장 모듈이나 임베디드 C 코드는 다른 C 코드에서 쉽게 호출될 수 있다.
CPython은 다른 C 코드를 호출하거나 다른 C 코드에서 호출할 수 있도록 특별한 후크를 허용한다.그것은 심지어 C가 될 필요도 없고, 어떤 언어도 네이티브 코드로 컴파일되고 같은 호출 규약을 가지고 있다.
간단한 경우, 공유 라이브러리를 로드할 수 있고 함수를 호출할 수 있는 mentionon이라는 프로그램을 만드는 것을 고려하십시오.run
예)
lib = dlopen("mylib.so", RTLD_LAZY);
func = dlsym(lib, "run");
(*func)();
그래서 당신이 모듈을 로드하고 그것의 코드를 호출하는 방식으로, CPython은 그것을 하지만 더 복잡한 방식으로, 더 나은 인터페이스와 전달되는 물체를 제공하는 것, 그리고 메모리 관리, 스레드 관리 등과 관련된 다른 복잡한 것들이 있다.
따라서 Python 구현의 플랫폼은 확장되고 있는 언어와 일치해야 한다. 예를 들어, CPython은 Java에서 확장될 수 없지만 Jython이라고 불리는 Python의 Java 구현은 Java에서 확장될 수 있다.NET 구현 IronPython은 에서 확장할 수 있다.넷 언어.
참조URL: https://stackoverflow.com/questions/10202306/python-bindings-how-does-it-work
'Programing' 카테고리의 다른 글
Java String - 문자열이 숫자만 포함되고 문자가 포함되지 않는지 확인 (0) | 2022.05.07 |
---|---|
Vue: 계산된 속성의 초기 트리거링 (0) | 2022.05.07 |
단순 vue 앱이 아무것도 표시되지 않음 (0) | 2022.05.07 |
IntelliJ IDEA에서 JavaDoc을 보는 방법? (0) | 2022.05.07 |
부츠랩 캐러셀이 장착된 VueJS 이미지 캐러셀에 전달 방법 (0) | 2022.05.07 |