Làm thế nào để cài đặt Python.NET cho C # (VS2019) trên Windows 10 và Python 3.8?

Aug 25 2020

Trên trang web chính thức của Python.NET, nó cho biết nó hỗ trợ Python 3.8. Tuyệt quá. Bây giờ tôi muốn gọi các mô-đun python 3.8 hiện có của mình từ một ứng dụng được phát triển trong C # (.NET framework v4.7.2).

CHỈNH SỬA:

Vì gần như không có hướng dẫn cài đặt nào được đưa ra bởi các tác giả của Python.NET cho các cuộc gọi từ C #, tôi đã làm theo các hướng dẫn được đưa ra ở đây . Lưu ý rằng tôi đang sử dụng miniconda3 và python 32bit (cái sau được yêu cầu cho dự án của tôi) vì vậy tôi đã làm như sau:

  1. Từ VScode, tôi đã cài đặt pythonnet pip installcũng như tất cả các gói python bắt buộc (hãy sử dụng numpyở đây cho mục đích của ví dụ) trong môi trường "C: \ ProgramData \ Miniconda3 \ envs \ py38_32".

  2. Đặt đường dẫn môi trường trong C # (trong 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. Đã tham chiếu Python.Runtime.dll từ thư mục "py38_32 \ Lib \ site-pack" trong dự án của tôi và đã thêm using Python.Runtime;

  2. Đã cố nhập numpy:

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

Ở đó nó không thành công khi nhập numpy, với "Python.Runtime.PythonException: 'ImportError". Nó cũng cho biết "Phiên bản Python là: Python3.8 từ" \ bin \ Debug \ MyProject.exe "... có vẻ như nó tìm kiếm python trong thư mục gỡ lỗi của tôi và không có trong đường dẫn được đề cập ở trên ... có thể .. Và nhập numpy từ VScode bằng cách sử dụng cùng một môi trường hoạt động hoàn toàn tốt.

Có ai biết chuyện gì đang xảy ra ở đây không?

Trả lời

LOST Aug 26 2020 at 01:45

Cách chính thức để cài đặt Python.NET là thông qua trình quản lý gói Python pip.

Trên Windows, điều đó sẽ xảy ra python.exe -m pip install pythonnet. Điều đó sẽ tạo ra Python.Runtime.dllmột nơi nào đó trong bản phân phối Python của bạn. Chỉ cần tham khảo nó từ dự án của bạn và đảm bảo các kiến ​​trúc phù hợp.

Một giải pháp thay thế không được hỗ trợ là sử dụng bản dựng không chính thức của tôi và đặt Runtime.PythonDLLở vị trí python38.dllbạn chọn (bạn có thể tìm thấy một bản trong thời gian chạy bằng cách sử dụng một gói NuGet khác: whichPython ).

bricx Aug 26 2020 at 21:26

Như đã đề cập ở đây , Anaconda (và Miniconda) không hoạt động với Python.NET. Tất cả những gì tôi phải làm là cài đặt lại một bản sao Python mới với tất cả gói tôi cần và thay thế đoạn mã sau bằng các đường dẫn mới:

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