Jak zainstalować Python.NET dla C # (VS2019) w systemie Windows 10 i dla Python 3.8?

Aug 25 2020

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:

  1. Z VScode, zainstalowałem pythonnet ze pip installwszystkimi wymaganymi pakietami Pythona ( użyjmy numpytutaj dla celów przykładu) w środowisku „C: \ ProgramData \ Miniconda3 \ envs \ py38_32”.

  2. 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);
  1. Odwołałem się do Python.Runtime.dll z folderu „py38_32 \ Lib \ site-packages” w moim projekcie i dodano using Python.Runtime;

  2. 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

LOST Aug 26 2020 at 01:45

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 ).

bricx Aug 26 2020 at 21:26

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";