最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用IronPython調(diào)用Python的實現(xiàn)

 更新時間:2023年02月08日 10:03:07   作者:虛夢年華  
本文主要介紹了C#使用IronPython調(diào)用Python的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、前言

以下摘自百度百科:

IronPython 是一種在 NET 和 Mono 上實現(xiàn)的 Python 語言,由 Jim Hugunin(同時也是 Jython 創(chuàng)造者)所創(chuàng)造。1.0 版于2006年9月5日發(fā)布。
隨后,在 2007 年,開發(fā)者決定改寫架構(gòu),使用動態(tài)類型系統(tǒng)以讓更多腳本語言能很容易地移植到NET Framework上。2008 年,隨著微軟發(fā)布 NET Framework3.0/3.5、Silverlight 之后, IronPython也發(fā)布了 2.0 版,最新版本是 2.7,于 2011年3月發(fā)布,支持.NET Framework 4.0。

我們可以把IronPython理解為在.NET平臺上實現(xiàn)的python解釋器,我們可以使用IronPython進(jìn)行python腳本的調(diào)用,也可以反過來,使用IronPython調(diào)用C#的功能。

目前IronPython支持兩個python版本,python2.7及python3.4,可根據(jù)自己實際需要進(jìn)行版本選擇。最新版本為支持python3.4的3.4版本,支持的.NET最低版本為.NET Framework4.6.2,也可在.NET Core、.NET5、.NET6上使用。

IronPython官網(wǎng):https://ironpython.net。

本文將以.NET5的控制臺應(yīng)用程序,實際演示通過IronPython在C#中調(diào)用Python腳本。

本文源代碼已上傳至GitHub,鏈接如下:

https://github.com/XMNHCAS/IronPythonDemo

二、IronPython安裝配置

打開Nuget管理工具,搜索IronPython,如下圖所示:

不需要調(diào)用任何包的情況下,只安裝第一個即可。

IronPython.StdLib是Python標(biāo)準(zhǔn)庫,如果需要調(diào)用標(biāo)準(zhǔn)庫則需要安裝這個包。安裝完成后,如果程序編譯之后不將此包的文件復(fù)制至編譯環(huán)境,則需要在項目的csproj文件中添加以下配置項:

<ItemGroup>
    <Content Include="lib\**">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
</ItemGroup>
<ItemGroup>
    <None Update="lib\**">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
</ItemGroup>

ps:使用此庫,推薦安裝VS的Python支持,否則可能會出現(xiàn)編譯失敗的情況。

三、基礎(chǔ)使用及標(biāo)準(zhǔn)庫使用

1、創(chuàng)建python腳本

項目創(chuàng)建完成后,在項目中添加一個文件夾,此處命名為“PythonScripts”,此文件夾用于放置所有python腳本以及第三方庫。創(chuàng)建完成后,在此文件夾中添加一個main.py文件,用以編寫我們的python示例腳本。

在main.py中添加以下函數(shù),然后把文件屬性的“復(fù)制到輸出目錄”一項改為“如果較新則復(fù)制”。

此示例調(diào)用了python的uuid標(biāo)準(zhǔn)庫,所以需要安裝前文提及的“IronPython.StdLib”包。

import sys
import uuid
 
def Test():
    return 'Hello IronPython!'
 
 
def SysVersion():
    return sys.version
 
 
def CreateUUID():
    return str(uuid.uuid1())

2、調(diào)用腳本

在Program.cs文件中,修改Main函數(shù):

using IronPython.Hosting;
using System;
 
namespace IronPythonDemo
{
    class Program
    {
        static void Main(string[] args) 
        {
            // 創(chuàng)建python解釋器
            var engine = Python.CreateEngine();
            // 加載腳本文件
            dynamic py = engine.ExecuteFile(@"PythonScripts/main.py");
 
            // 調(diào)用Python腳本的Test函數(shù)
            Console.WriteLine("Test:");
            var data = py.Test();
            Console.WriteLine(data);
 
            Console.WriteLine();
 
            // 查看IronPython的Python版本及使用的.NET版本
            Console.WriteLine("Python & .NET Version:");
            var version = py.SysVersion();
            Console.WriteLine(version);
 
            Console.WriteLine();
 
            // 使用Python的UUID標(biāo)準(zhǔn)庫生成基于時間戳的UUID
            Console.WriteLine("Create UUID By Python:");
            var uuid = py.CreateUUID();
            Console.WriteLine(uuid.ToString());
 
            Console.ReadKey();
        }
    }
}

運行結(jié)果如下:

四、IronPython調(diào)用第三方庫

IronPython調(diào)用python第三方庫,需要將調(diào)用的第三方庫文件拷貝至輸出目錄,并使用IronPython加載。由于IronPython目前支持的python版本是2.7及3.4,所以需要注意第三方庫的版本,根據(jù)實際需要選擇IronPython可支持的庫版本。

由于需要復(fù)制第三方庫的文件,建議創(chuàng)建單獨的python項目并配置虛擬環(huán)境,以便python腳本的函數(shù)測試以及后續(xù)的文件拷貝。

以下以調(diào)用requests庫為例,示范IronPython如何調(diào)用第三方庫。

1、創(chuàng)建python虛擬環(huán)境

在需要創(chuàng)建虛擬環(huán)境的目錄下,打開cmd,并運行以下命令。

注意:python版本應(yīng)為3.4,如果本地存在多個版本的解釋器,請將命令中的python改為3.4的版本的python.exe路徑。

python -m venv env

創(chuàng)建完成后,就會出現(xiàn)一個env的文件夾,這個文件夾就是我們的虛擬環(huán)境了。

2、python虛擬環(huán)境安裝requests庫。

由于我們使用的IronPython支持的python版本是3.4,所以我們安裝的requests庫也應(yīng)該是支持python3.4的版本,如2.15.1。

首先要運行以下命令,啟動虛擬環(huán)境:

env\Scripts\activate.bat

然后使用pip安裝requests 2.15.1:

pip install requests==2.15.1

如下圖所示:

3、使用requests

我們可以請求requests的官方示例接口,如下所示:

import requests as req
 
 
def GetReqTest():
    res = req.get('https://httpbin.org/basic-auth/user/pass', auth=('user', 'pass'))
    return res.text
 
 
if __name__ == '__main__':
    res_json = GetReqTest()
    print(res_json)

運行結(jié)果如下:

4、IronPython調(diào)用

首先我們需要把剛剛的虛擬環(huán)境,也就是env文件夾里的Lib文件夾,整個復(fù)制到我們的C#項目中,放到PythonScripts文件夾下。

然后打開該項目的csproj文件,添加如下配置:

<ItemGroup>
    <None Update="PythonScripts\Lib\**">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
</ItemGroup>

接著在main.py中添加上我們剛剛寫的請求測試函數(shù):

def GetReqTest():
    res = req.get('https://httpbin.org/basic-auth/user/pass', auth=('user', 'pass'))
    return res.text

最后在Program.cs中配置第三方庫,并調(diào)用python的請求測試方法:

using IronPython.Hosting;
using Microsoft.Scripting.Hosting;
using System;
 
namespace IronPythonDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 創(chuàng)建python解釋器
            var engine = Python.CreateEngine();
 
            SetSearchFile(ref engine);
 
            // 加載腳本文件
            dynamic py = engine.ExecuteFile(@"PythonScripts/main.py");
           
            // 調(diào)用requests庫
            Console.WriteLine("Use Requests:");
            var resp = py.GetReqTest();
            Console.WriteLine(resp);
 
            Console.ReadKey();
        }
 
        /// <summary>
        /// 配置python第三方庫路徑
        /// </summary>
        /// <param name="engine"></param>
        private static void SetSearchFile(ref ScriptEngine engine)
        {
            var paths = engine.GetSearchPaths();
            paths.Add(@"PythonScripts\Lib");
            paths.Add(@"PythonScripts\Lib\site-packages");
            engine.SetSearchPaths(paths);
        }
    }
}

運行結(jié)果如下:

五、完整代碼

1、Program.cs

using IronPython.Hosting;
using Microsoft.Scripting.Hosting;
using System;
 
namespace IronPythonDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 創(chuàng)建python解釋器
            var engine = Python.CreateEngine();
 
            SetSearchFile(ref engine);
 
            // 加載腳本文件
            dynamic py = engine.ExecuteFile(@"PythonScripts/main.py");
 
            // 調(diào)用Python腳本的Test函數(shù)
            Console.WriteLine("Test:");
            var data = py.Test();
            Console.WriteLine(data);
 
            Console.WriteLine();
 
            // 查看IronPython的Python版本及使用的.NET版本
            Console.WriteLine("Python & .NET Version:");
            var version = py.SysVersion();
            Console.WriteLine(version);
 
            Console.WriteLine();
 
            // 使用Python的UUID標(biāo)準(zhǔn)庫生成基于時間戳的UUID
            Console.WriteLine("Create UUID By Python:");
            var uuid = py.CreateUUID();
            Console.WriteLine(uuid.ToString());
 
            Console.WriteLine();
 
            // 調(diào)用requests庫
            Console.WriteLine("Use Requests:");
            var resp = py.GetReqTest();
            Console.WriteLine(resp);
 
            Console.ReadKey();
        }
 
        /// <summary>
        /// 配置python第三方庫路徑
        /// </summary>
        /// <param name="engine"></param>
        private static void SetSearchFile(ref ScriptEngine engine)
        {
            var paths = engine.GetSearchPaths();
            paths.Add(@"PythonScripts\Lib");
            paths.Add(@"PythonScripts\Lib\site-packages");
            engine.SetSearchPaths(paths);
        }
    }
}

2、main.py

import sys
import uuid
import requests as req
def Test():
    return 'Hello IronPython!'
def SysVersion():
    return sys.version
def CreateUUID():
    return str(uuid.uuid1())
def GetReqTest():
    res = req.get('https://httpbin.org/basic-auth/user/pass', auth=('user', 'pass'))
    return res.text

六、結(jié)尾

使用IronPython包是C#調(diào)用Python的其中一種方法,它的優(yōu)點就是可以將python和C#的代碼都集成在一起,基礎(chǔ)配置完成后,編寫及修改代碼都非常簡單,無需為python代碼進(jìn)行多次打包。當(dāng)然缺點就非常多了,比如由于Python版本限制,有部分常用的庫無法使用、項目初始配置較為繁雜等。

IronPython的使用場景有很多,比如當(dāng)我們需要進(jìn)行爬蟲的客戶端開發(fā)的時候,我們就可以通過IronPython,使用C#進(jìn)行高效美觀的客戶端開發(fā),同時可以使用python進(jìn)行高效的爬蟲開發(fā)。

隨著新需求的不斷提出,總會出現(xiàn)某種語言無法滿足需求或者開發(fā)成本偏高的情況,這種時候,我們就可以使用如IronPython這樣的庫,使用多語言進(jìn)行開發(fā),取長補短。

到此這篇關(guān)于C#使用IronPython調(diào)用Python的實現(xiàn)的文章就介紹到這了,更多相關(guān)C# IronPython調(diào)用Python內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#簡易人機(jī)對抗“石頭剪刀布”游戲的實現(xiàn)

    C#簡易人機(jī)對抗“石頭剪刀布”游戲的實現(xiàn)

    本文主要介紹了C#簡易人機(jī)對抗“石頭剪刀布”游戲的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • C#從數(shù)據(jù)庫讀取數(shù)據(jù)到DataSet并保存到xml文件的方法

    C#從數(shù)據(jù)庫讀取數(shù)據(jù)到DataSet并保存到xml文件的方法

    這篇文章主要介紹了C#從數(shù)據(jù)庫讀取數(shù)據(jù)到DataSet并保存到xml文件的方法,涉及C#操作DataSet保存到XML文件的技巧,需要的朋友可以參考下
    2015-04-04
  • C#引用類型和值類型的適用場合和區(qū)別

    C#引用類型和值類型的適用場合和區(qū)別

    今天小編就為大家分享一篇關(guān)于C#引用類型和值類型的適用場合和區(qū)別,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Unity使用ScrollRect制作搖桿

    Unity使用ScrollRect制作搖桿

    這篇文章主要為大家詳細(xì)介紹了Unity使用ScrollRect制作搖桿,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C#使用TreeView控件實現(xiàn)的二叉樹泛型節(jié)點類及其方法

    C#使用TreeView控件實現(xiàn)的二叉樹泛型節(jié)點類及其方法

    TreeView?控件在?C#?中主要用于顯示分層結(jié)構(gòu)的數(shù)據(jù),這通常是一個文件系統(tǒng)的表示,但也可以是任何具有父子關(guān)系的數(shù)據(jù)集合,本文給大家介紹了C#使用TreeView控件實現(xiàn)的二叉樹泛型節(jié)點類及其方法,需要的朋友可以參考下
    2024-03-03
  • C#讀取本地網(wǎng)絡(luò)配置信息全攻略分享

    C#讀取本地網(wǎng)絡(luò)配置信息全攻略分享

    在當(dāng)今數(shù)字化時代,網(wǎng)絡(luò)已深度融入我們生活與工作的方方面面,對于軟件開發(fā)而言,掌握本地計算機(jī)的網(wǎng)絡(luò)配置信息顯得尤為關(guān)鍵,而在 C# 編程的世界里,我們又該如何巧妙地讀取這些至關(guān)重要的本地網(wǎng)絡(luò)配置信息呢?接下來,就讓我們一同踏上探索之旅
    2025-01-01
  • C#中應(yīng)用程序集的裝載過程詳解

    C#中應(yīng)用程序集的裝載過程詳解

    這篇文章主要介紹了C#中應(yīng)用程序集的裝載過程的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • C#讀取QQ純真IP數(shù)據(jù)庫QQWry.Dat的代碼

    C#讀取QQ純真IP數(shù)據(jù)庫QQWry.Dat的代碼

    QQ純真IP庫算是IP地址收集較為全的一個IP庫,對于IP查詢來說這個是不錯的選擇。下面是如何查詢純真IP庫的一個類,使用C#代碼。
    2007-03-03
  • C#中參數(shù)個數(shù)可變的方法實例分析

    C#中參數(shù)個數(shù)可變的方法實例分析

    這篇文章主要介紹了C#中參數(shù)個數(shù)可變的方法,以一個簡單實例分析了C#中參數(shù)個數(shù)可變的方法,主要是使用params關(guān)鍵字來實現(xiàn)的,是C#編程中比較實用的技巧,需要的朋友可以參考下
    2014-11-11
  • C# Winform實現(xiàn)波浪滾動效果

    C# Winform實現(xiàn)波浪滾動效果

    這篇文章主要為大家詳細(xì)介紹了C# Winform實現(xiàn)波浪滾動效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11

最新評論

和龙市| 万州区| 陕西省| 汉沽区| 阿城市| 宣汉县| 定南县| 灵璧县| 余江县| 台中县| 新源县| 陇南市| 乌鲁木齐县| 景泰县| 塔城市| 响水县| 沽源县| 陕西省| 衡东县| 绵竹市| 永泰县| 河北区| 孙吴县| 秦安县| 台东市| 高青县| 西乌| 章丘市| 宁夏| 任丘市| 五河县| 仁化县| 调兵山市| 岗巴县| 乡城县| 梅河口市| 公安县| 吉隆县| 中卫市| 花莲县| 镇康县|