วิธีการติดตั้ง Python.NET สำหรับ C # (VS2019) บน Windows 10 และสำหรับ Python 3.8
ในเว็บไซต์ทางการของ Python.NET ระบุว่ารองรับ Python 3.8 เยี่ยมมาก ตอนนี้ฉันสนใจที่จะเรียกโมดูล python 3.8 ที่มีอยู่ของฉันจากแอปพลิเคชันที่พัฒนาใน C # (.NET framework v4.7.2)
แก้ไข:
เนื่องจากใกล้กับคำแนะนำการติดตั้งไม่ได้รับโดยผู้เขียนของ Python.NET สำหรับการโทรจาก C #, ผมทำตามคำแนะนำที่ระบุที่นี่ โปรดทราบว่าฉันใช้ miniconda3 และ python 32bit (ซึ่งจำเป็นสำหรับโปรเจ็กต์ของฉัน) ดังนั้นฉันจึงทำสิ่งต่อไปนี้:
จาก 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 ในโฟลเดอร์ debug ของฉันและไม่อยู่ในเส้นทางที่กล่าวถึงข้างต้น ... อาจจะ .. และการนำเข้า numpy จาก VScode โดยใช้สภาพแวดล้อมเดียวกันทำงานได้ดีโดยสิ้นเชิง
ใครมีเบาะแสว่าเกิดอะไรขึ้นที่นี่?
คำตอบ
วิธีการอย่างเป็นทางการในการติดตั้ง Python.NET 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";