¿Cómo instalar Python.NET para C # (VS2019) en Windows 10 y Python 3.8?

Aug 25 2020

En el sitio web oficial de Python.NET, dice que es compatible con Python 3.8. Excelente. Ahora estoy interesado en llamar a mis módulos de python 3.8 existentes desde una aplicación desarrollada en C # (.NET framework v4.7.2).

EDICIONES:

Dado que los autores de Python.NET casi no dan instrucciones de instalación para las llamadas desde C #, seguí las instrucciones que se dan aquí . Tenga en cuenta que estoy usando miniconda3 y python 32bit (este último es necesario para mi proyecto), así que hice lo siguiente:

  1. Desde VScode, instalé pythonnet con pip installtodos los paquetes de python requeridos (usemos numpyaquí para el propósito del ejemplo) en el entorno "C: \ ProgramData \ Miniconda3 \ envs \ py38_32".

  2. Establecer rutas de entorno en C # (en VS2019):

    string pythonPath1 = @"C:\ProgramData\Miniconda3\envs\py38_32";
    string pythonPath2 = @"C:\ProgramData\Miniconda3\envs\py38_32\Lib\site-packages";
    Environment.SetEnvironmentVariable("PATH", pythonPath1, EnvironmentVariableTarget.Process);
    Environment.SetEnvironmentVariable("PYTHONHOME", pythonPath1, EnvironmentVariableTarget.Process);
    Environment.SetEnvironmentVariable("PYTHONPATH", pythonPath2, EnvironmentVariableTarget.Process);
  1. Hice referencia a Python.Runtime.dll de la carpeta "py38_32 \ Lib \ site-packages" en mi proyecto y agregué using Python.Runtime;

  2. Intenté importar numpy:

    using (Py.GIL())
    {
        dynamic np = Py.Import("numpy"); //fail on this line with ImportError
    }
    

Allí falló en la importación numpy, con "Python.Runtime.PythonException: 'ImportError". También dice "La versión de Python es: Python3.8 de" \ bin \ Debug \ MyProject.exe "... parece que busca Python en mi carpeta de depuración, y no en la ruta mencionada anteriormente ... tal vez ... Y la importación de numpy desde VScode usando el mismo entorno funciona perfectamente.

¿Alguien con una pista de lo que está pasando aquí?

Respuestas

LOST Aug 26 2020 at 01:45

La forma oficial de instalar Python.NET es a través del administrador de paquetes de Python pip.

En Windows, eso sería python.exe -m pip install pythonnet. Eso creará Python.Runtime.dllen algún lugar de su distribución de Python. Simplemente haga referencia a él desde su proyecto y asegúrese de que las arquitecturas coincidan.

Una alternativa no admitida es usar mi compilación no oficial y establecer Runtime.PythonDLLla ubicación python38.dllde su elección (puede encontrar una en tiempo de ejecución usando otro paquete NuGet : WhichPython ).

bricx Aug 26 2020 at 21:26

Como se menciona aquí , Anaconda (y Miniconda) no funcionan con Python.NET. Todo lo que tenía que hacer era reinstalar una copia nueva de Python con todo el paquete que necesitaba y reemplazar el siguiente fragmento de código con las nuevas rutas:

string pythonPath1 = @"C:\Python";
string pythonPath2 = @"C:\Python\Lib\site-packages";