Estoy explorando Python. Tengo curiosidad sobre las ataduras de pitón. ¿Alguien podría explicar cómo es posible que pueda tener acceso a bibliotecas C desde Python?enlaces de python, ¿cómo funciona?
Respuesta
Hay varias formas de llamar al código escrito en C desde Python.
En primer lugar, está el módulo ctypes en la biblioteca estándar. Le permite cargar una biblioteca de vínculos dinámicos (DLL en Windows, bibliotecas compartidas .so
en Linux) y funciones de llamada desde estas bibliotecas, directamente desde Python. Tales bibliotecas generalmente se escriben en C.
En segundo lugar, en el caso de CPython existe la API Python/C. Se puede usar de dos formas principales:
Una biblioteca de enlace dinámico se puede escribir en C de forma que CPython lo trate como un módulo (podrá importarlo en sus programas de Python). La API de Python/C permite que la biblioteca defina funciones que están escritas en C pero que aún se pueden llamar desde Python. La API es muy poderosa y proporciona funciones para manipular todos los tipos de datos de Python y acceder a las partes internas del intérprete.
La segunda forma de utilizar la API C es incrustar Python en un programa escrito en C. El programa C puede entonces crear módulos integrados escritos en C y exponer funciones C, al igual que en el enlace dinámico enfoque bibliotecario. La API también permite que el programa ejecute scripts que luego pueden importar y usar los módulos incorporados. Esto se puede usar para crear un sistema de complemento basado en Python.
Los "enlaces" se implementan como una biblioteca de Python pura usando ctypes o como una biblioteca de enlace dinámico que usa Python/C API. La segunda opción a veces se usa con herramientas como SWIG que facilitan la tarea al generar el código "placa de caldera" o Boost.Python que proporciona una API C++ encima de la API Python/C facilitando la interfaz con el código C++.
Además lee: Foreign Function Interface
La respuesta es simple, el intérprete python (CPython) está escrito en C y puede llamar a otras bibliotecas C dinámicamente, su módulo de extensión C o código C incorporado puede llamarse fácilmente desde cualquier otro código C.
CPython permite ganchos especiales para que pueda llamar a otros códigos C o llamar desde otro código C. Ni siquiera necesita ser C, cualquier lenguaje que compila con código nativo y tiene la misma convención de llamadas.
Para un caso simple, considere crear un programa llamado mython, que puede cargar cualquier biblioteca compartida e intenta llamar a una función run
, p.
lib = dlopen("mylib.so", RTLD_LAZY);
func = dlsym(lib, "run");
(*func)();
lo tanto, en forma que haya cargado un módulo y llamó su código, CPython hace eso, pero de una manera más compleja, proporcionando mejores interfaces y objetos para pasar alrededor, además de que hay otras complejidades involucradas de gestión de memoria, gestión de hilos etc.
Por lo tanto, la implementación de la plataforma de Python debe coincidir con el idioma en el que se está extendiendo, por ejemplo CPython no es extensible en Java, pero la implementación de Java de Python llamada Jython se puede extender en Java y, de forma similar, la implementación .NET IronPython se puede extender en los lenguajes .Net.
Hay muchas cosas escritas en C. Pero muchas cosas escritas en C * no * son extensibles en C. Lo que hace especial a Python ? –
@Anurag ¿Es correcto que python no sea extensible, por ejemplo, a Java? – ashim
@ IgnacioVazquez-Abrams ver edición –
- 1. ¿Cómo funciona la llamada en Python?
- 2. Python Lambdas y enlaces de variable
- 3. Creación recíproca de enlaces duros con python
- 4. Enlaces de Python SVN para Windows
- 5. Utilizando enlaces de Python, Selenium WebDriver click() no funciona a veces.
- 6. SWIG Enlaces de Python al código nativo que no funciona con OpenCV 2.1
- 7. ¿Cómo funciona mercurial sin Python?
- 8. ¿Cómo funciona multiprocesamiento.Manager() en python?
- 9. ¿Cómo unir enlaces en Python para obtener un ciclo?
- 10. ¿Cómo puedo obtener enlaces href desde HTML usando Python?
- 11. ¿Cómo funciona la importación de Python?
- 12. ¿Cómo funciona este código de función python?
- 13. ¿Cómo funciona la referencia de Python?
- 14. Detección de características en enlaces de OpenCV Python
- 15. listFiles() ¿El archivo no funciona en enlaces simbólicos?
- 16. Python sys.stdout.flush() no funciona
- 17. ¿Cómo obtengo una lista de enlaces simbólicos, excluyendo enlaces rotos?
- 18. recuperar enlaces de la página web usando Python y BeautifulSoup
- 19. Configuración de OpenCV 2.3 con enlaces de python en ubuntu
- 20. ¿Cómo funciona sympy? ¿Cómo interactúa con el shell interactivo de Python y cómo funciona el shell interactivo de Python?
- 21. ¿Transacciones de almacenamiento en enlaces de Python de Redland?
- 22. cv2 y BGR2YCrCb no funcionan con los enlaces de Python
- 23. cómo python http solicitud y respuesta funciona
- 24. Enlaces de OpenCV Python para el algoritmo de GrabCut
- 25. Cómo configurar enlaces para NSPopUpButton
- 26. Ejecutando JavaScript en href de enlaces con Python
- 27. Escribiendo enlaces y envoltorios
- 28. intérprete de scriptable JavaScript con enlaces para PHP o Python?
- 29. selenium.wait_for_condition equivalent en los enlaces de Python para WebDriver
- 30. ¿Qué enlaces de Python existen para CVS o SVN?
Qué parte de [extemb] (http://docs.python.org/extending/index.html) que no entiendes? –
Te sugiero que hagas una búsqueda en Google de "enlaces de Python C". – steveha
"Estoy explorando Python."Aprender todo sobre Python es algo grandioso, pero probablemente deberías tener una muy buena comprensión del modelo de Python antes de profundizar en las vinculaciones C. Entenderás cómo funciona el sistema de dirección asistida mucho mejor una vez que sabes conducir –