Python.NET es una biblioteca que proporciona interoperabilidad entre Python y C# en aplicaciones .NET.
Con Python.NET, podemos invocar fácilmente código Python desde C#, y utilizar bibliotecas de Python y acceder a los recursos del ecosistema Python directamente en aplicaciones .NET.
Esta capacidad es especialmente útil para integrar funcionalidades avanzadas de Python, como machine learning y análisis de datos, en aplicaciones desarrolladas con .NET.
Características de Python.NET,
- Interoperabilidad Completa: Permite la llamada de código Python desde C#, y viceversa, facilitando la integración de ambas tecnologías.
- Acceso a Bibliotecas Python: Permite utilizar directamente bibliotecas Python en aplicaciones .NET.
- Soporte para Tipos de Datos: Maneja la conversión entre tipos de datos de Python y C# automáticamente.
- Ejecución de Scripts Python: Permite ejecutar scripts Python y utilizar sus resultados en aplicaciones C#.
La interoperabilidad puede tener un impacto en el rendimiento, especialmente si se realizan llamadas frecuentes entre C# y Python. Es decir, no os esperéis programas rápidos (Python es muy lento, y con el interop aún peor).
Para más información, documentación y ejemplos adicionales, visita el repositorio oficial de Python.NET en GitHub. Aquí encontrarás todos los recursos necesarios para comenzar a integrar Python en tus aplicaciones C#.
Instalación de Python.NET
Para agregar Python.NET a tu proyecto, utiliza el administrador de paquetes NuGet. Abre la terminal o la consola del administrador de paquetes de Visual Studio y ejecuta el siguiente comando:
Install-Package Pythonnet
O bien, mediante la interfaz de NuGet en Visual Studio, busca Pythonnet
e instálalo en tu proyecto.
Cómo Usar Python.NET
Configuración Inicial
Para comenzar a usar Python.NET en tu proyecto C#, necesitas inicializar el entorno de Python y configurar el intérprete Python. Aquí hay un ejemplo de cómo hacerlo:
using Python.Runtime;
// sustituir por la version de Python que tengáis instalada
Runtime.PythonDLL = "python312.dll";
PythonEngine.Initialize();
using (Py.GIL())
{
dynamic np = Py.Import("numpy");
Console.WriteLine(np.cos(np.pi * 2));
dynamic sin = np.sin;
Console.WriteLine(sin(5));
double c = (double)(np.cos(5) + sin(5));
Console.WriteLine(c);
dynamic a = np.array(new List<float> { 1, 2, 3 });
Console.WriteLine(a.dtype);
dynamic b = np.array(new List<float> { 6, 5, 4 }, dtype: np.int32);
Console.WriteLine(b.dtype);
Console.WriteLine(a * b);
Console.ReadKey();
}
En este ejemplo, inicializamos el entorno de Python, importamos la biblioteca NumPy, creamos un array y mostramos su contenido en la consola.
Llamando a Funciones Python desde C#
Puedes llamar a funciones definidas en scripts Python desde C# utilizando Python.NET. Aquí hay un ejemplo de cómo hacerlo:
- Definir una función en un script Python. Creamos un fichero en la solución del proyecto, por ejemplo
example.py
. Ahí metemos nuestras funciones.
def add(a, b):
return a + b
En Visual Studio / propiedades del fichero, marcamos la opción “Copy to Output Directory” como “Copy Always”.
- Llamar a la función desde C#: Ahora podemos llamar nuestra función importando el módulo que hemos creado.
using Python.Runtime;
Runtime.PythonDLL = "python312.dll";
PythonEngine.Initialize();
using (Py.GIL()) // Adquirir el GIL
{
dynamic pyScript = Py.Import("example");
dynamic result = pyScript.add(10, 20);
Console.WriteLine($"Resultado de la suma: {result}");
}
En este ejemplo, importamos el script Python y llamamos a la función add
pasando dos argumentos. El resultado se muestra en la consola.