iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >C#使用IronPython调用Python的实现
  • 198
分享到

C#使用IronPython调用Python的实现

C#IronPython调用PythonIronPython调用Python 2023-02-08 12:02:42 198人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录一、前言二、Ironpython安装配置三、基础使用及标准库使用1、创建Python脚本2、调用脚本四、IronPython调用第三方库1、创建python虚拟环境2、pytho

一、前言

以下摘自百度百科:

IronPython 是一种在 NET 和 Mono 上实现的 Python 语言,由 Jim Hugunin(同时也是 Jython 创造者)所创造。1.0 版于2006年9月5日发布。
随后,在 2007 年,开发者决定改写架构,使用动态类型系统以让更多脚本语言能很容易地移植到NET Framework上。2008 年,随着微软发布 NET Framework3.0/3.5、Silverlight 之后, IronPython也发布了 2.0 版,最新版本是 2.7,于 2011年3月发布,支持.net Framework 4.0。

我们可以把IronPython理解为在.NET平台上实现的python解释器,我们可以使用IronPython进行python脚本的调用,也可以反过来,使用IronPython调用C#的功能。

目前IronPython支持两个python版本,python2.7及python3.4,可根据自己实际需要进行版本选择。最新版本为支持python3.4的3.4版本,支持的.NET最低版本为.NET Framework4.6.2,也可在.net core、.NET5、.NET6上使用。

IronPython官网:https://ironpython.net。

本文将以.NET5的控制台应用程序,实际演示通过IronPython在C#中调用Python脚本。

本文源代码已上传至GitHub,链接如下:

Https://github.com/XMNHCAS/IronPythonDemo

二、IronPython安装配置

打开Nuget管理工具,搜索IronPython,如下图所示:

不需要调用任何包的情况下,只安装第一个即可。

IronPython.StdLib是Python标准库,如果需要调用标准库则需要安装这个包。安装完成后,如果程序编译之后不将此包的文件复制至编译环境,则需要在项目的csproj文件中添加以下配置项:

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

ps:使用此库,推荐安装VS的Python支持,否则可能会出现编译失败的情况。

三、基础使用及标准库使用

1、创建python脚本

项目创建完成后,在项目中添加一个文件夹,此处命名为“PythonScripts”,此文件夹用于放置所有python脚本以及第三方库。创建完成后,在此文件夹中添加一个main.py文件,用以编写我们的python示例脚本。

在main.py中添加以下函数,然后把文件属性的“复制到输出目录”一项改为“如果较新则复制”。

此示例调用了python的uuid标准库,所以需要安装前文提及的“IronPython.StdLib”包。

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

2、调用脚本

在Program.cs文件中,修改Main函数:

using IronPython.Hosting;
using System;
 
namespace IronPythonDemo
{
    class Program
    {
        static void Main(string[] args) 
        {
            // 创建python解释器
            var engine = Python.CreateEngine();
            // 加载脚本文件
            dynamic py = engine.ExecuteFile(@"PythonScripts/main.py");
 
            // 调用Python脚本的Test函数
            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标准库生成基于时间戳的UUID
            Console.WriteLine("Create UUID By Python:");
            var uuid = py.CreateUUID();
            Console.WriteLine(uuid.ToString());
 
            Console.ReadKey();
        }
    }
}

运行结果如下:

四、IronPython调用第三方库

IronPython调用python第三方库,需要将调用的第三方库文件拷贝至输出目录,并使用IronPython加载。由于IronPython目前支持的python版本是2.7及3.4,所以需要注意第三方库的版本,根据实际需要选择IronPython可支持的库版本。

由于需要复制第三方库的文件,建议创建单独的python项目并配置虚拟环境,以便python脚本的函数测试以及后续的文件拷贝。

以下以调用requests库为例,示范IronPython如何调用第三方库。

1、创建python虚拟环境

在需要创建虚拟环境的目录下,打开cmd,并运行以下命令。

注意:python版本应为3.4,如果本地存在多个版本的解释器,请将命令中的python改为3.4的版本的python.exe路径。

python -m venv env

创建完成后,就会出现一个env的文件夹,这个文件夹就是我们的虚拟环境了。

2、python虚拟环境安装requests库。

由于我们使用的IronPython支持的python版本是3.4,所以我们安装的requests库也应该是支持python3.4的版本,如2.15.1。

首先要运行以下命令,启动虚拟环境:

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)

运行结果如下:

4、IronPython调用

首先我们需要把刚刚的虚拟环境,也就是env文件夹里的Lib文件夹,整个复制到我们的C#项目中,放到PythonScripts文件夹下。

然后打开该项目的csproj文件,添加如下配置:

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

接着在main.py中添加上我们刚刚写的请求测试函数:

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

最后在Program.cs中配置第三方库,并调用python的请求测试方法:

using IronPython.Hosting;
using Microsoft.Scripting.Hosting;
using System;
 
namespace IronPythonDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建python解释器
            var engine = Python.CreateEngine();
 
            SetSearchFile(ref engine);
 
            // 加载脚本文件
            dynamic py = engine.ExecuteFile(@"PythonScripts/main.py");
           
            // 调用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);
        }
    }
}

运行结果如下:

五、完整代码

1、Program.cs

using IronPython.Hosting;
using Microsoft.Scripting.Hosting;
using System;
 
namespace IronPythonDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建python解释器
            var engine = Python.CreateEngine();
 
            SetSearchFile(ref engine);
 
            // 加载脚本文件
            dynamic py = engine.ExecuteFile(@"PythonScripts/main.py");
 
            // 调用Python脚本的Test函数
            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标准库生成基于时间戳的UUID
            Console.WriteLine("Create UUID By Python:");
            var uuid = py.CreateUUID();
            Console.WriteLine(uuid.ToString());
 
            Console.WriteLine();
 
            // 调用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

六、结尾

使用IronPython包是C#调用Python的其中一种方法,它的优点就是可以将python和C#的代码都集成在一起,基础配置完成后,编写及修改代码都非常简单,无需为python代码进行多次打包。当然缺点就非常多了,比如由于Python版本限制,有部分常用的库无法使用、项目初始配置较为繁杂等。

IronPython的使用场景有很多,比如当我们需要进行爬虫的客户端开发的时候,我们就可以通过IronPython,使用C#进行高效美观的客户端开发,同时可以使用python进行高效的爬虫开发。

随着新需求的不断提出,总会出现某种语言无法满足需求或者开发成本偏高的情况,这种时候,我们就可以使用如IronPython这样的库,使用多语言进行开发,取长补短。

到此这篇关于C#使用IronPython调用Python的实现的文章就介绍到这了,更多相关C# IronPython调用Python内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C#使用IronPython调用Python的实现

本文链接: https://www.lsjlt.com/news/195166.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#使用IronPython调用Python的实现
    目录一、前言二、IronPython安装配置三、基础使用及标准库使用1、创建python脚本2、调用脚本四、IronPython调用第三方库1、创建python虚拟环境2、pytho...
    99+
    2023-02-08
    C# IronPython调用Python IronPython调用Python
  • C#使用IronPython库调用Python脚本
    IronPython是一种在 .NET及 Mono上的 Python实现,由微软的 Jim Hugunin所发起,是一个开源的项目,基于微软的 DLR引擎。 IronPython的主...
    99+
    2024-04-02
  • c#(IronPython)调用Pyth
    直接一段代码演示 public void StartTCP() { ScriptEngine engine = Python.CreateEngine(); var pat...
    99+
    2023-01-30
    IronPython Pyth
  • C#中怎么使用IronPython库调用Python脚本
    在C#中使用IronPython库调用Python脚本的步骤如下: 首先,需要将IronPython库添加到C#项目中。可以通过...
    99+
    2024-03-08
    python C#
  • python 与c++相互调用实现
    目录一、c++调用Python1.Python脚本2.C++调用python脚本二、接口方法1.规范化语法三、Pthon调用c++1.基于extern2.基于swig一、c++调用P...
    99+
    2024-04-02
  • C# 调用WebApi的实现
    1.WebRequest方式 Post: private void button1_Click(object sender, EventArgs e) { ...
    99+
    2024-04-02
  • python 使用ctypes调用C/C++ dll详情
    python和C/C++混合编程,推荐使用python的内置模块ctypes,从名字上可以看出是c,可见对C++的支持并不太好。 一般的步骤: 1、导入ctypes模块,加载C/C+...
    99+
    2024-04-02
  • c#调用c++的DLL的实现方法
    目录1.采用托管的方式进行调用,就和正常调用c#的dll一样2.非托管的方式进行调用C#是托管型代码,创建的对象会自动回收。C++是非托管型代码,创建的对象需要手动回收(有时不手动回...
    99+
    2024-04-02
  • SQLSERVER调用C#的代码实现
    简单例子 首先写一段简单的 C# 代码,然后把它编译成 dll。 namespace Bussiness { public class UserFunctions { public sta...
    99+
    2023-01-30
    SQLSERVER调用C#
  • c++动态库调用的实现
    目录一、生成dll二、调用dll在平时的开发中某些情况,动态库和静态库是程序开发的不二法门,例如封装一个库,供别人调用(日志库、字符串处理库、设备信息采集库等),比如接入第三方系统或...
    99+
    2024-04-02
  • C# 调用Python
    一、简介 IronPython 是一种在 NET 和 Mono 上实现的 Python 语言,由 Jim Hugunin(同时也是 Jython 创造者)所创造。 Python是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释性...
    99+
    2023-10-07
    c# python
  • python直接调用和使用swig法方调用c++库
    c++运算速度快于python,python简单易写。很多时候对于已有的c++代码也不想用python重写,此时就自然而然地想到用python调用c或者c++,两全其美。然而根据这些...
    99+
    2024-04-02
  • 用python实现调用jar包
    本文作者:botoo背景:python3.6 32位 + jre 32位 + windows64位首先环境搭建:安装jpype,安装的时候输入 pip install jpype1 (后面要加一个1)*一定要注意 jre和python的位数...
    99+
    2023-01-31
    python jar
  • Python中使用jpype调用Jar包中的实现方法
    目录使用jpype调用Jar包中的实现方法安装使用说明代码jpype调用jar包“Class xx not found“问题环境代码问题检查点解决总结使用jp...
    99+
    2022-12-08
    Python使用jpype jpype调用Jar包 Python使用jpype调用jar
  • 怎么使用C#/.net程序调用Python
    这篇文章主要介绍了怎么使用C#/.net程序调用Python的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用C#/.net程序调用Python文章都会有所收获,下面我们一起来看看吧。C#/.net程序调用...
    99+
    2023-07-05
  • 使用spyder3调试python程序的实现步骤
    目录Spyder官方文档地址开始调试打断点的两种姿势普通的breakpoint带条件的breakpoint总结一下刚刚所讲的剩下的一些细节Step IntoReturn说是简明教程,...
    99+
    2024-04-02
  • Python Web 实现Ajax调用
    Html前端: $.ajax({ type:"GET", url:'/getmobile', data:'id='+i...
    99+
    2023-01-31
    Python Web Ajax
  • python调用C库
    编写C库test.c#include <stdio.h> #include <string.h> int strcmpTest(char *a, char *b) { return strcmp(a,...
    99+
    2023-01-31
    python
  • Python 调用c#的dll pyth
    1.首先有准备好的c#的dll可供调用。需要本文的dll的自行下载dll2.安装pythonnet 在python的安装路径 Python\Python36-32\Lib\site-packages\pip   下执行 pip insta...
    99+
    2023-01-31
    Python dll pyth
  • python调用mrjob实现hadoo
    咱们一般写mapreduce是通过java和streaming来写的,身为pythoner的我,java不会,没办法就用streaming来写mapreduce日志分析。 这里要介绍一个模块,是基于streaming搞的东西。mrjob 可...
    99+
    2023-01-31
    python mrjob hadoo
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作