Jak zainstalować Python.NET dla C # (VS2019) w systemie Windows 10 i dla Python 3.8?
Na oficjalnej stronie Python.NET jest napisane, że obsługuje Python 3.8. Świetny. Teraz jestem zainteresowany wywołaniem moich istniejących modułów Pythona 3.8 z aplikacji opracowanej w języku C # (.NET Framework v4.7.2).
EDYCJE:
Ponieważ autorzy Python.NET nie podają prawie żadnych instrukcji instalacji dla wywołań z C #, postępowałem zgodnie z instrukcjami podanymi tutaj . Zauważ, że używam miniconda3 i python 32bit (ten ostatni jest wymagany w moim projekcie), więc wykonałem następujące czynności:
Z VScode, zainstalowałem pythonnet ze
pip installwszystkimi wymaganymi pakietami Pythona ( użyjmynumpytutaj dla celów przykładu) w środowisku „C: \ ProgramData \ Miniconda3 \ envs \ py38_32”.Ustaw ścieżki środowiskowe w C # (w 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);
Odwołałem się do Python.Runtime.dll z folderu „py38_32 \ Lib \ site-packages” w moim projekcie i dodano
using Python.Runtime;Próbowano zaimportować numpy:
using (Py.GIL()) { dynamic np = Py.Import("numpy"); //fail on this line with ImportError }
Tam nie powiodło się przy imporcie numpy, z "Python.Runtime.PythonException: 'ImportError". Jest tam również napisane „Wersja Pythona to: Python3.8 z„ \ bin \ Debug \ MyProject.exe ”... wygląda na to, że szuka języka Python w moim folderze debugowania, a nie w ścieżce wspomnianej powyżej ... , A importowanie numpy z VScode przy użyciu tego samego środowiska działa całkowicie dobrze.
Ktoś, kto ma pojęcie o tym, co się tutaj dzieje?
Odpowiedzi
Oficjalnym sposobem instalacji Python.NET jest użycie menedżera pakietów Python pip.
W systemie Windows to byłoby python.exe -m pip install pythonnet. To utworzy Python.Runtime.dllgdzieś w twojej dystrybucji Pythona. Po prostu odwołaj się do niego z projektu i upewnij się, że architektury są zgodne.
Nieobsługiwany Alternatywą jest użycie mój nieoficjalny build oraz zestaw Runtime.PythonDLLdo lokalizacji python38.dlldo wyboru (można znaleźć w czasie wykonywania przy użyciu innego pakietu Nuget: WhichPython ).
Jak wspomniano tutaj , Anaconda (i Miniconda) nie współpracują z Python.NET. Wszystko, co musiałem zrobić, to przeinstalować nową kopię Pythona z całym pakietem, którego potrzebowałem i zastąpić następujący fragment kodu nowymi ścieżkami:
string pythonPath1 = @"C:\Python";
string pythonPath2 = @"C:\Python\Lib\site-packages";