C#調用pyd的方法
1.安裝pythonnet
pythonnet是一個強大的工具包,用于C#代碼與python代碼進行交互,不僅可以實現(xiàn)在C#中調用python,也可以實現(xiàn)在python中調用C#.
GitHub:https://github.com/pythonnet/pythonnet
- 首先打開nuget包管理器:

- 根據(jù)你python的版本下載對應的pythonnet,筆者使用的是python3.6,所以下載的是py36。

2.調用pyd中的模塊
- 首先引用pythonnet:
using Python.Runtime;
- 調用pyd的模塊:
//All calls to python should be inside a using (Py.GIL()) {/* Your code here */} block.
using (Py.GIL())
{
//Import python modules using dynamic mod = Py.Import("mod"), then you can call functions as normal.
//All python objects should be declared as dynamic type.
dynamic np = Py.Import("test_pyd");
np.hello();
Console.ReadKey();
}

- python代碼:
def hello():
print("Hello world")
3.可能出現(xiàn)的問題及解決方案
- 環(huán)境變量的配置,環(huán)境變量的對應路徑的python版本需要與你下載的pythonnet包版本是相同的:

筆者電腦中有不同版本的python,經(jīng)過筆者測試后發(fā)現(xiàn)更換版本最簡單的方式是替換環(huán)境變量的順序,筆者是在win10系統(tǒng)下進行的測試,其他系統(tǒng)未進行過測試。
另外要注意你的pyd如果是使用64位編譯的,則環(huán)境變量對應的python版本也需要是64位的。
當python368在上時:

當python378在上時:

- System.DllNotFoundException:“無法加載 DLL“python36”: 找不到指定的模塊。

解決方案:將python文件夾中的python36.dll復制到debug目錄下

- Python.Runtime.PythonException:“ModuleNotFoundError : No module named 'test_pyd'”

解決方案:將test_pyd.pyd放入debug目錄下

- System.MissingMethodException:“Method not found: 'System.Reflection.Emit.AssemblyBuilder System.AppDomain.DefineDynamicAssembly(System.Reflection.AssemblyName, System.Reflection.Emit.AssemblyBuilderAccess)'.”

解決方案:該問題是由于.NET框架所導致的,筆者在使用.NET Core 3.1的時候就會出現(xiàn)這個錯誤,更換為.NET Framework 4.7.2后問題解決。


以上就是C#調用pyd的方法的詳細內容,更多關于C#調用pyd的資料請關注腳本之家其它相關文章!
相關文章
C# 9 中新加入的關鍵詞 init,record,with
這篇文章主要介紹了C# 9 中新加入的關鍵詞 init,record,with的相關資料,幫助大家更好的理解和學習c# 9,感興趣的朋友可以了解下2020-08-08
解析Silverlight調用WCF/Rest異常的解決方法
本篇文章對Silverlight調用WCF/Rest異常的解決方法進行了詳細的分析介紹,需要的朋友參考下2013-05-05

