Como instalar o Python.NET para C # (VS2019) no Windows 10 e para Python 3.8?

Aug 25 2020

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:

  1. Do VScode, instalei o pythonnet com pip install, bem como todos os pacotes python necessários (vamos usar numpyaqui para o propósito do exemplo) no ambiente "C: \ ProgramData \ Miniconda3 \ envs \ py38_32".

  2. 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);
  1. Referenciou o Python.Runtime.dll da pasta "py38_32 \ Lib \ site-packages" em meu projeto e adicionei using Python.Runtime;

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

LOST Aug 26 2020 at 01:45

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

bricx Aug 26 2020 at 21:26

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