资讯 小学 初中 高中 语言 会计职称 学历提升 法考 计算机考试 医护考试 建工考试 教育百科
栏目分类:
子分类:
返回
空麓网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
空麓网 > 计算机考试 > 软件开发 > 后端开发 > Python

c#嵌入Python代码

Python 更新时间: 发布时间: 计算机考试归档 最新发布

c#嵌入Python代码

c# 用pythonnet 嵌入Python代码

C# 用pythonnet 嵌入Python代码,可以导入第三方库和自己python代码

我的测试环境

  • window10
  • conda 23.1.0(python3.10.9)
  • Microsoft Visual Studio Community 2022 (64 位) - Current版本 17.5.0

运行结果

步骤

  1. 安装python(或anaconda)
  2. 在VS项目NuGet中安装pythonnet
    • 工具->NuGet->管理…
  3. 创建python环境
    • 创建专用虚拟环境(windows下首先切换到要建立虚拟环境的根目录下),执行
    conda create --prefix=D:condaenvenv_name python=3.10
    路径及python版本根据需要自定义。
    • 使用Anaconda Prompt,激活虚拟环境
    conda activate F:condaenvenv_name
    • 安装Numpypip install numpy
  4. 如果为C#界面程序,需要配置为x64环境(与python吻合)
    • 鼠标放在VS项目上,右键属性->生成->常规->目标平台->选择x64
  5. 如果是自己的代码,需要放到建立虚拟环境包目录“{虚拟环境安装位置}Libsite-packages”中
  6. 代码示例
    • c#
    using Python.Runtime;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.IO;string pathToVirtualEnv = "D:condaenvenv_name";//string pathToVirtualEnv = "E:anaconda3";Environment.SetEnvironmentVariable("PATH", pathToVirtualEnv, EnvironmentVariableTarget.Process);Environment.SetEnvironmentVariable("PYTHONHOME", pathToVirtualEnv, EnvironmentVariableTarget.Process);Environment.SetEnvironmentVariable("PYTHONPATH", $"{pathToVirtualEnv}Libsite-packages;{pathToVirtualEnv}Lib;E:anaconda3Librarybin;E:anaconda3Libraryusrbin;E:anaconda3Scripts", EnvironmentVariableTarget.Process);Runtime.PythonDLL = "D:condaenvenv_namepython310.dll";//Runtime.PythonDLL = "E:anaconda3python310.dll";PythonEngine.PythonHome = pathToVirtualEnv;PythonEngine.PythonPath = PythonEngine.PythonPath + ";" + Environment.GetEnvironmentVariable("PYTHONPATH", EnvironmentVariableTarget.Process);PythonEngine.Initialize();using (Py.GIL()){    dynamic np = Py.Import("numpy");    //dynamic np1 = Py.Import("test3");    //Console.WriteLine(np1.Add(2));    //Console.WriteLine(np.cos(np.pi * 2));    //py.hello();    double c = (double)(np.array(1));    Console.WriteLine(c);}
    • winForm
    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.IO;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using Python.Runtime;namespace DemoPythonnet{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        public dynamic np   = null;        public dynamic a;        public dynamic b;        private void Form1_Load(object sender, EventArgs e)        {            string pathToVirtualEnv = "D:condaenvenv_name";            Environment.SetEnvironmentVariable("PATH", pathToVirtualEnv, EnvironmentVariableTarget.Process);            Environment.SetEnvironmentVariable("PYTHONHOME", pathToVirtualEnv, EnvironmentVariableTarget.Process);            Environment.SetEnvironmentVariable("PYTHONPATH", $"{pathToVirtualEnv}Libsite-packages;{pathToVirtualEnv}Lib", EnvironmentVariableTarget.Process);            Runtime.PythonDLL = "D:condaenvenv_namepython310.dll";            PythonEngine.PythonHome = pathToVirtualEnv;            PythonEngine.PythonPath = PythonEngine.PythonPath + ";" + Environment.GetEnvironmentVariable("PYTHONPATH", EnvironmentVariableTarget.Process);            PythonEngine.Initialize();            np = Py.Import("numpy");        }        private void button1_Click(object sender, EventArgs e)        {            //使用第三方库            using (Py.GIL())            {                Console.WriteLine(np.cos(np.pi * 2));                dynamic sin = np.sin;                Console.WriteLine(sin(5));                double c = (double)(np.cos(5) + sin(5));                Console.WriteLine(c);                a = np.array(new List { 1, 2, 3 });                Console.WriteLine(a.dtype);                b = np.array(new List { 6, 5, 4 }, dtype: np.int32);                Console.WriteLine(b.dtype);                Console.WriteLine(a * b);            }        }        private void button2_Click(object sender, EventArgs e)        {            using (Py.GIL())            {                Console.WriteLine(a * b);            }        }    }}

感谢 https://blog.csdn.net/The_Moon_/article/details/127208124
感谢 https://blog.csdn.net/weixin_44064908/article/details/129270649

转载请注明:文章转载自 http://www.konglu.com/
本文地址:http://www.konglu.com/it/1097183.html
免责声明:

我们致力于保护作者版权,注重分享,被刊用文章【c#嵌入Python代码】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2023 成都空麓科技有限公司

ICP备案号:蜀ICP备2023000828号-2