Come installare Python.NET per C # (VS2019) su Windows 10 e per Python 3.8?

Aug 25 2020

Sul sito web ufficiale di Python.NET, si dice che supporta Python 3.8. Grande. Ora sono interessato a chiamare i miei moduli python 3.8 esistenti da un'applicazione sviluppata in C # (.NET framework v4.7.2).

MODIFICHE:

Poiché quasi nessuna istruzione di installazione viene fornita dagli autori di Python.NET per le chiamate da C #, ho seguito le istruzioni fornite qui . Nota che sto usando miniconda3 e python 32bit (quest'ultimo richiesto per il mio progetto), quindi ho fatto quanto segue:

  1. Da VScode, ho installato pythonnet con pip installcosì come tutti i pacchetti python richiesti ( usiamoli numpyqui per lo scopo dell'esempio) nell'ambiente "C: \ ProgramData \ Miniconda3 \ envs \ py38_32".

  2. Imposta i percorsi dell'ambiente in C # (in 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. Ha fatto riferimento a Python.Runtime.dll dalla cartella "py38_32 \ Lib \ site-packages" nel mio progetto e aggiunto using Python.Runtime;

  2. Ho provato a importare numpy:

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

Là non è riuscito nell'importazione numpy, con "Python.Runtime.PythonException: 'ImportError". Dice anche "La versione di Python è: Python3.8 da" \ bin \ Debug \ MyProject.exe "... sembra che cerchi python nella mia cartella di debug e non nel percorso menzionato sopra ... forse .. E importare numpy da VScode utilizzando lo stesso ambiente funziona perfettamente.

Qualcuno ha la minima idea di cosa sta succedendo qui?

Risposte

LOST Aug 26 2020 at 01:45

Il modo ufficiale per installare Python.NET è tramite il gestore di pacchetti Python pip.

Su Windows, sarebbe python.exe -m pip install pythonnet. Questo creerà Python.Runtime.dllda qualche parte nella tua distribuzione Python. Basta fare riferimento al progetto e assicurarsi che le architetture corrispondano.

Un'alternativa non supportata consiste nell'usare la mia build non ufficiale e impostare Runtime.PythonDLLil percorso python38.dlldi tua scelta (puoi trovarne uno in fase di esecuzione usando un altro pacchetto NuGet : WhichPython ).

bricx Aug 26 2020 at 21:26

Come accennato qui , Anaconda (e Miniconda) non funziona con Python.NET. Tutto quello che dovevo fare era reinstallare una nuova copia di Python con tutto il pacchetto di cui avevo bisogno e sostituire il seguente pezzo di codice con i nuovi percorsi:

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