Ejecutando funciones CPython desde C #

Estoy trabajando en un proyecto en el que necesito poder ejecutar una función de Python que depende de SciPy / NumPy. Debido a que se trata de un complemento de un proyecto que ya está en curso, el uso de IronPython no sería una opción.

Información adicional:

  • Python.NET parecía encajar bien, pero no pude obtener el valor de retorno de RunString () (solo devolvería NULL).
  • Es necesario pasar argumentos y capturar el valor de retorno (una tupla).
  • La función está en un paquete estadístico que fue creado por un grupo de apoyo para el equipo, por lo que tampoco sería posible modificarlo.

No sé qué hacer. Se agradece cualquier sugerencia en la dirección correcta. ¡Gracias por cualquier ayuda que usted puede dar!

Entiendo que esto puede ser bastante vago, pero no puedo dar detalles explícitos sobre el proyecto. Si necesita alguna aclaración, hágamelo saber y haré todo lo posible.

preguntado el 16 de mayo de 11 a las 18:05

4 Respuestas

Supongo que podría escribir una DLL que use la API CPython para exponer la función y luego llamarla en C #. Es posible incrustar el intérprete de Python; aunque nunca he hecho esto personalmente, supongo que sería útil: http://docs.python.org/extending/embedding.html

contestado el 16 de mayo de 11 a las 22:05

¡Gracias! Investigaré esto. - Eonxre

¿Necesita ser portátil más allá de Windows? De lo contrario, tal vez pueda incrustar el intérprete CPython con C ++ / CLI, envolverlo en una bonita interfaz .Net-ish y usar el código resultante de C #. Nunca lo intenté, así que no sé si funcionará.

Independientemente de si sigue esta ruta o la ruta 'escribir una DLL nativa', probablemente será más fácil incrustar Python usando Boost.Python, aunque no estoy seguro de si su código contenedor será lo suficientemente grande como para hacer que todo esto (compilar el gigante de Boost, aprender Boost.Python, asegurarse de que funcione con C ++ / CLR, aumentar el tamaño del archivo de destino) valga la pena. eso.

contestado el 16 de mayo de 11 a las 22:05

¡Gracias! Voy a investigar esto :) - Eonxre

IronPython usando DLR podría ser el camino a seguir. Tenga en cuenta que no será la forma más rápida, pero parece algo que vale la pena perseguir si va a hacer esto mucho. Otro enlace útil

contestado el 16 de mayo de 11 a las 23:05

¡Gracias! Leeré un poco y veré si esto funciona para mí. - Eonxre

La acorazado El proyecto se inició para permitir el uso de extensiones CPython de IronPython, especialmente SciPy / NumPy, según parece. No sé qué tan utilizable es (y qué tan activamente todavía se está desarrollando)

contestado el 17 de mayo de 11 a las 01:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.