C#調(diào)用pyd的方法
1.安裝pythonnet
pythonnet是一個(gè)強(qiáng)大的工具包,用于C#代碼與python代碼進(jìn)行交互,不僅可以實(shí)現(xiàn)在C#中調(diào)用python,也可以實(shí)現(xiàn)在python中調(diào)用C#.
GitHub:https://github.com/pythonnet/pythonnet
- 首先打開(kāi)nuget包管理器:
- 根據(jù)你python的版本下載對(duì)應(yīng)的pythonnet,筆者使用的是python3.6,所以下載的是py36。
2.調(diào)用pyd中的模塊
- 首先引用pythonnet:
using Python.Runtime;
- 調(diào)用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)的問(wèn)題及解決方案
- 環(huán)境變量的配置,環(huán)境變量的對(duì)應(yīng)路徑的python版本需要與你下載的pythonnet包版本是相同的:
筆者電腦中有不同版本的python,經(jīng)過(guò)筆者測(cè)試后發(fā)現(xiàn)更換版本最簡(jiǎn)單的方式是替換環(huán)境變量的順序,筆者是在win10系統(tǒng)下進(jìn)行的測(cè)試,其他系統(tǒng)未進(jìn)行過(guò)測(cè)試。
另外要注意你的pyd如果是使用64位編譯的,則環(huán)境變量對(duì)應(yīng)的python版本也需要是64位的。
當(dāng)python368在上時(shí):
當(dāng)python378在上時(shí):
- System.DllNotFoundException:“無(wú)法加載 DLL“python36”: 找不到指定的模塊。
解決方案:將python文件夾中的python36.dll復(fù)制到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)'.”
解決方案:該問(wèn)題是由于.NET框架所導(dǎo)致的,筆者在使用.NET Core 3.1的時(shí)候就會(huì)出現(xiàn)這個(gè)錯(cuò)誤,更換為.NET Framework 4.7.2后問(wèn)題解決。
以上就是C#調(diào)用pyd的方法的詳細(xì)內(nèi)容,更多關(guān)于C#調(diào)用pyd的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C# IQueryable<T>揭開(kāi)表達(dá)式樹(shù)的神秘面紗
這篇文章主要介紹了C# IQueryable<T>表達(dá)式樹(shù),對(duì)IQueryable<T>感興趣的同學(xué),必須要仔細(xì)看一下2021-04-04C#統(tǒng)計(jì)字符串里中文漢字個(gè)數(shù)的方法
這篇文章主要介紹了C#統(tǒng)計(jì)字符串里中文漢字個(gè)數(shù)的方法,本文通過(guò)正則實(shí)現(xiàn)統(tǒng)計(jì)出一段字符串里中文字?jǐn)?shù),需要的朋友可以參考下2014-08-08C#開(kāi)發(fā)Windows UWP系列之3D變換
這篇文章介紹了C#開(kāi)發(fā)Windows UWP系列之3D變換,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06C# 9 中新加入的關(guān)鍵詞 init,record,with
這篇文章主要介紹了C# 9 中新加入的關(guān)鍵詞 init,record,with的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c# 9,感興趣的朋友可以了解下2020-08-08解析Silverlight調(diào)用WCF/Rest異常的解決方法
本篇文章對(duì)Silverlight調(diào)用WCF/Rest異常的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05