¿Cómo instalar Python.NET para C # (VS2019) en Windows 10 y Python 3.8?
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:
Desde VScode, instalé pythonnet con
pip installtodos los paquetes de python requeridos (usemosnumpyaquí para el propósito del ejemplo) en el entorno "C: \ ProgramData \ Miniconda3 \ envs \ py38_32".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);
Hice referencia a Python.Runtime.dll de la carpeta "py38_32 \ Lib \ site-packages" en mi proyecto y agregué
using Python.Runtime;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
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 ).
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";