Как установить Python.NET для C # (VS2019) в Windows 10 и для Python 3.8?
На официальном сайте Python.NET говорится, что он поддерживает Python 3.8. Отлично. Теперь мне интересно вызвать мои существующие модули python 3.8 из приложения, разработанного на C # (.NET framework v4.7.2).
РЕДАКТИРОВАТЬ:
Поскольку почти никаких инструкций по установке для вызовов из C # авторы Python.NET не дают, я выполнил инструкции, приведенные здесь . Обратите внимание, что я использую miniconda3 и 32-битный python (последний необходим для моего проекта), поэтому я сделал следующее:
Из VScode я установил pythonnet со
pip installвсеми необходимыми пакетами python (давайте использоватьnumpyздесь для целей примера) в среде «C: \ ProgramData \ Miniconda3 \ envs \ py38_32».Задайте пути к среде в 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);
Ссылка на Python.Runtime.dll из папки "py38_32 \ Lib \ site-packages" в моем проекте и добавление
using Python.Runtime;Пытался импортировать 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 с использованием той же среды работает совершенно нормально.
Кто-нибудь знает, что здесь происходит?
Ответы
Официальный способ установки Python.NET - через диспетчер пакетов Python pip.
В Windows это было бы так python.exe -m pip install pythonnet. Это создаст Python.Runtime.dllгде-нибудь в вашем дистрибутиве Python. Просто укажите его в своем проекте и убедитесь, что архитектуры совпадают.
Неподдерживаемая альтернатива - использовать мою неофициальную сборку и установить Runtime.PythonDLLее в python38.dllвыбранном вами месте (вы можете найти ее во время выполнения, используя другой пакет NuGet: WhichPython ).
Как упоминалось здесь , Anaconda (и Miniconda) не работает с Python.NET. Все, что мне нужно было сделать, это переустановить новую копию Python со всем необходимым мне пакетом и заменить следующий фрагмент кода новыми путями:
string pythonPath1 = @"C:\Python";
string pythonPath2 = @"C:\Python\Lib\site-packages";