나는 python을 탐험 중이다. 파이썬 바인딩에 대해 궁금합니다. 파이썬에서 C 라이브러리에 액세스 할 수있는 방법은 누구나 설명 할 수 있습니다.파이썬 바인딩, 어떻게 작동합니까?
답변
C로 작성된 코드를 Python에서 호출하는 방법에는 여러 가지가 있습니다.
먼저 표준 라이브러리에 ctypes 모듈이 있습니다. 동적 링크 라이브러리 (Windows에서는 DLL, Linux에서는 공유 라이브러리 .so
)를로드하고 Python에서이 라이브러리의 함수를 호출 할 수 있습니다. 이러한 라이브러리는 대개 C로 작성됩니다.
두 번째로 CPython의 경우 Python/C API가 있습니다. 이것은 두 가지 주요한 방법으로 사용될 수 있습니다 :
다이나믹 링크 라이브러리는 CPython이 모듈로 취급 할 수 있도록 작성 될 수 있습니다 (파이썬 프로그램에서 가져올 수 있습니다). Python/C API는 라이브러리가 C로 작성되었지만 여전히 Python에서 호출 할 수있는 함수를 정의 할 수있게합니다. API는 매우 강력하며 모든 파이썬 데이터 유형을 조작하고 인터프리터의 내부에 액세스하는 기능을 제공합니다.
C API를 사용하는 두 번째 방법은 Python을 C로 작성된 프로그램에 포함시키는 것입니다. C 프로그램은 동적 링크와 마찬가지로 C로 작성된 내장 모듈을 작성하고 C 함수를 노출 할 수 있습니다 도서관 접근법. 또한 API를 사용하면 프로그램에서 스크립트를 실행하여 내장 모듈을 가져 와서 사용할 수 있습니다. 이것은 Python 기반 플러그인 시스템을 만드는 데 사용할 수 있습니다.
"바인딩"은 ctypes를 사용하는 순수 Python 라이브러리 또는 Python/C API를 사용하는 동적 연결 라이브러리로 구현됩니다. 두 번째 옵션은 SWIG과 같은 도구와 함께 사용되어 "보일러 판"코드 생성을 처리하여 작업을 더 쉽게 만들어 주거나 Boost.Python은 Python/C API 위에 C++ API를 제공하므로 C++ 코드와 쉽게 인터페이스 할 수 있습니다.
또한 읽기 : Foreign Function Interface
파이썬 (CPython) 인터프리터는 C로 작성되었으며 다른 C 라이브러리를 동적으로 호출 할 수 있으므로 C 확장 모듈이나 포함 된 C 코드는 다른 C 코드에서 쉽게 호출 할 수 있습니다.
CPython은 다른 C 코드를 호출하거나 다른 C 코드에서 호출 할 수 있도록 특수 후크를 허용합니다. 네이티브 코드로 컴파일되고 같은 호출 규칙을 가진 언어 일 필요는 없습니다.
단순한 사례로 mython이라는 프로그램을 만들어 공유 라이브러리를로드하고 함수 run
을 호출 할 수 있습니다.
lib = dlopen("mylib.so", RTLD_LAZY);
func = dlsym(lib, "run");
(*func)();
그래서 방법으로 당신이 모듈을로드하고 코드라고 한 CPython과는 않습니다하지만 더 복잡한 방법으로, 더 나은 인터페이스와 객체를 제공 주변 통과, 플러스 메모리 관리의 관련된 다른 복잡한은, 스레드 관리가있다
그래서 파이썬 구현 플랫폼은 확장되는 언어와 일치해야합니다. CPython은 Java에서 확장 할 수 없지만 Jython이라는 Python Java 구현은 Java로 확장 될 수 있으며 이와 유사하게 .NET 구현 IronPython은 .Net 언어로 확장 될 수 있습니다.
많은 것들이 C로 작성되었지만 C로 작성된 많은 것들은 C에서 확장 가능하지 않습니다. 파이썬을 특별하게 만드는 것은 무엇입니까? ? –
@Anurag 파이썬이 자바에게 확장 성이 없다는 것이 맞습니까? – ashim
@ IgnacioVazquez-Abrams 편집보기 –
- 1. 그룹 캡처는 어떻게 작동합니까? (wrt 파이썬 정규식)
- 2. Udacity 웹 파이썬 인터프리터는 어떻게 작동합니까?
- 3. 파이썬 프로그래밍을 위해 Cygwin은 어떻게 작동합니까?
- 4. 어떻게 작동합니까?
- 5. JSF에서 '바인딩'은 어떻게 작동합니까?
- 6. macports와 fontforge 파이썬 바인딩
- 7. 꿀꺽 꿀꺽 파이썬 바인딩
- 8. 파이썬은 어떻게 작동합니까?
- 9. 파이썬 : 함수를 키에 바인딩
- 10. libparted를위한 파이썬 바인딩?
- 11. VLC/파이썬 바인딩?
- 12. 리눅스에서 파이썬 바인딩 컴파일
- 13. win32com python.Interpreter는 어떻게 작동합니까?
- 14. Greenlets는 어떻게 작동합니까?
- 15. AMF 통신은 어떻게 작동합니까?
- 16. BIRT - 데이터 바인딩은 어떻게 작동합니까?
- 17. python webdriver는 어떻게 작동합니까?
- 18. 어떻게 작동합니까?
- 19. 어떻게 작동합니까?
- 20. - 어떻게 작동합니까?
- 21. 어떻게 작동합니까?
- 22. get_FIELD_display (django에서)는 어떻게 작동합니까?
- 23. django는 virtualenv와 어떻게 작동합니까?
- 24. nosetests sqlalchemy 플러그인은 어떻게 작동합니까?
- 25. 파이썬 : if-else 사이의 for 루프, how/why는 어떻게 작동합니까?
- 26. ClientIDMode는 어떻게 작동합니까?
- 27. JdbcTemplate과 TransactionManager가 정확히 어떻게 작동합니까?
- 28. 파이썬 : 어떻게 확인 하시겠습니까?
- 29. 장고 모델 필드는 어떻게 작동합니까?
- 30. X11없이 파이썬 Gtk3 바인딩 사용하기
[extemb]의 일부 (http://docs.python.org/extending/index.html) 당신이 이해하지? –
"파이썬 C 바인딩"에 대한 Google 검색을 제안합니다. – steveha
"나는 파이썬을 탐험 중입니다."모든 Python에 대해 배우는 것은 좋은 일이지만, C 바인딩을 너무 자세히 살펴보기 전에 Python 모델을 잘 이해하고 있어야합니다. 운전 방법을 알면 파워 스티어링 장치가 어떻게 작동하는지 훨씬 잘 이해할 것입니다. . –