Como instalar o Python.NET para C # (VS2019) no Windows 10 e para Python 3.8?
No site oficial do Python.NET, diz que suporta Python 3.8. Ótimo. Agora estou interessado em chamar meus módulos Python 3.8 existentes de um aplicativo desenvolvido em C # (.NET framework v4.7.2).
EDITAR% S:
Como quase nenhuma instrução de instalação é fornecida pelos autores do Python.NET para chamadas do C #, segui as instruções fornecidas aqui . Observe que estou usando miniconda3 e python 32 bits (o último é necessário para meu projeto), então fiz o seguinte:
Do VScode, instalei o pythonnet com
pip install, bem como todos os pacotes python necessários (vamos usarnumpyaqui para o propósito do exemplo) no ambiente "C: \ ProgramData \ Miniconda3 \ envs \ py38_32".Defina os caminhos do ambiente em C # (em 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);
Referenciou o Python.Runtime.dll da pasta "py38_32 \ Lib \ site-packages" em meu projeto e adicionei
using Python.Runtime;Tentei importar numpy:
using (Py.GIL()) { dynamic np = Py.Import("numpy"); //fail on this line with ImportError }
Lá, ele falhou na importação numpy, com "Python.Runtime.PythonException: 'ImportError". Também diz "A versão Python é: Python3.8 de" \ bin \ Debug \ MyProject.exe "... parece que procura python em minha pasta de depuração, e não no caminho mencionado acima ... talvez .. .E importar numpy do VScode usando o mesmo ambiente funciona perfeitamente bem.
Alguém sabe o que está acontecendo aqui?
Respostas
A maneira oficial de instalar o Python.NET é por meio do gerenciador de pacotes Python pip.
No Windows, isso seria python.exe -m pip install pythonnet. Isso criará Python.Runtime.dllalgum lugar em sua distribuição Python. Basta referenciá-lo em seu projeto e garantir que as arquiteturas sejam compatíveis.
Uma alternativa sem suporte é usar minha construção não oficial e definir Runtime.PythonDLLo local python38.dllde sua escolha (você pode encontrar um em tempo de execução usando outro pacote NuGet : WhichPython ).
Conforme mencionado aqui , Anaconda (e Miniconda) não funciona com Python.NET. Tudo que precisei fazer foi reinstalar uma nova cópia do Python com todo o pacote de que precisava e substituir o seguinte trecho de código pelos novos caminhos:
string pythonPath1 = @"C:\Python";
string pythonPath2 = @"C:\Python\Lib\site-packages";