Come installare Python.NET per C # (VS2019) su Windows 10 e per Python 3.8?
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:
Da VScode, ho installato pythonnet con
pip installcosì come tutti i pacchetti python richiesti ( usiamolinumpyqui per lo scopo dell'esempio) nell'ambiente "C: \ ProgramData \ Miniconda3 \ envs \ py38_32".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);
Ha fatto riferimento a Python.Runtime.dll dalla cartella "py38_32 \ Lib \ site-packages" nel mio progetto e aggiunto
using Python.Runtime;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
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 ).
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";