Как установить Python.NET для C # (VS2019) в Windows 10 и для Python 3.8?

Aug 25 2020

На официальном сайте Python.NET говорится, что он поддерживает Python 3.8. Отлично. Теперь мне интересно вызвать мои существующие модули python 3.8 из приложения, разработанного на C # (.NET framework v4.7.2).

РЕДАКТИРОВАТЬ:

Поскольку почти никаких инструкций по установке для вызовов из C # авторы Python.NET не дают, я выполнил инструкции, приведенные здесь . Обратите внимание, что я использую miniconda3 и 32-битный python (последний необходим для моего проекта), поэтому я сделал следующее:

  1. Из VScode я установил pythonnet со pip installвсеми необходимыми пакетами python (давайте использовать numpyздесь для целей примера) в среде «C: \ ProgramData \ Miniconda3 \ envs \ py38_32».

  2. Задайте пути к среде в C # (в 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. Ссылка на Python.Runtime.dll из папки "py38_32 \ Lib \ site-packages" в моем проекте и добавление using Python.Runtime;

  2. Пытался импортировать numpy:

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

Там он потерпел неудачу при импорте numpy с "Python.Runtime.PythonException: 'ImportError". Он также говорит: "Версия Python: Python3.8 из" \ bin \ Debug \ MyProject.exe "... похоже, что он ищет python в моей папке отладки, а не в указанном выше пути ... может быть .. .И импорт numpy из VScode с использованием той же среды работает совершенно нормально.

Кто-нибудь знает, что здесь происходит?

Ответы

LOST Aug 26 2020 at 01:45

Официальный способ установки Python.NET - через диспетчер пакетов Python pip.

В Windows это было бы так python.exe -m pip install pythonnet. Это создаст Python.Runtime.dllгде-нибудь в вашем дистрибутиве Python. Просто укажите его в своем проекте и убедитесь, что архитектуры совпадают.

Неподдерживаемая альтернатива - использовать мою неофициальную сборку и установить Runtime.PythonDLLее в python38.dllвыбранном вами месте (вы можете найти ее во время выполнения, используя другой пакет NuGet: WhichPython ).

bricx Aug 26 2020 at 21:26

Как упоминалось здесь , Anaconda (и Miniconda) не работает с Python.NET. Все, что мне нужно было сделать, это переустановить новую копию Python со всем необходимым мне пакетом и заменить следующий фрагмент кода новыми путями:

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