.NET Core奇技淫巧之WinForm使用Python.NET并打包

news/2025/3/19 20:23:59/文章来源:https://www.cnblogs.com/GuZhenYin/p/18781724
前言

之前整了一个GZY.EFCoreCompare 的库,可以用做对比实体与数据库结构.感兴趣可以去看看,地址:GZY.EFCoreCompare

但是只能导出execl表格.

后来大佬用Python写了个类,可以将execl表格直接生成SQL语句.  但是需要通过开发工具 或者python环境去运行.

对现场的非技术人员很不友好..所以就想着用WinForm包装一个UI界面.

废话不多说,我们开始正文

 

正文

.NET Core目前主流的和python交互的类库有两个. CSnakes 和 Python.NET

我是两个类库都试过了,虽然CSnakes性能可能更好,但是需要采用依赖注入的形式去使用,

而且虚拟环境需要科技上网才能下载,对WinForm并不太友好,所以后来放弃了.

Python.NET则可以直接使用嵌入式的python版本来作为环境,相对WinForm比较友好,所以这里采用Python.NET来与python进行交互

1.下载嵌入式的python

  • 打开链接: https://www.python.org/downloads/windows/
  • 下载 Windows embeddable package (64-bit) 版本

2.处理嵌入式的python无法使用pip的问题

  • 解压后编辑 python313._pth (这里是3.13版本,根据版本编辑),取消注释 import site
  • 下载 https://bootstrap.pypa.io/pip/get-pip.py 到python.exe所在文件夹
  • 执行命令: 
    .\python.exe get-pip.py

     

  • 然后执行命令:
    .\python.exe -m pip

    这样,我们就发现pip可以正常使用了

3.通过pip命令下载所需的包.

   我这里因为使用的pandas解析的excel所以需要安装pandas,命令如下:

.\python.exe -m pip install --upgrade pandas -t Lib\site-packages\
.\python.exe -m pip install --upgrade openpyxl -t Lib\site-packages\

这里我们通过-t 指定下载到嵌入式python的相对文件夹下,方便我们打包

4.将安装好包的python目录复制到Winfrom项目下,并设置复制到输出目录.

类似如图:

 

5.通过Nuget安装Python.NET包.

如图:

 

6.编写WinFrom加载和点击事件

这里就不贴其他控件了,没啥内容.

我们在窗体加载的时候初始化python的环境,代码如下:

 private void AdminForm_Load(object sender, EventArgs e){string pythonPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "pythone");string pythonDll = Path.Combine(pythonPath, "python313.dll");Runtime.PythonDLL = pythonDll;PythonEngine.Initialize();}

在按钮点击的时候,调用python类,去生成对应的SQL语句,代码如下:

        private void button2_Click(object sender, EventArgs e){if (string.IsNullOrEmpty(textBox1.Text)){MessageBox.Show("请选择文件!");return;}using (Py.GIL()){dynamic sys = Py.Import("sys"); //导入sys模块string sitePackagesPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "pythone", "Lib", "site-packages"); //设置site-packages路径string scripts= Path.Combine(AppDomain.CurrentDomain.BaseDirectory);//设置python脚本所在路径sys.path.append(sitePackagesPath);//添加site-packages路径sys.path.append(scripts);//添加python脚本路径dynamic np = Py.Import("gen_sql_fromexcel"); //导入python脚本
np.generate_sql_from_excel(textBox1.Text, Environment.CurrentDirectory + "/output.sql"); //调用python脚本中的方法
}MessageBox.Show("生成成功!请到根目录查看.");}

注释里已经解释了对应代码的作用.(注意,一定要设置依赖包的路径  也就是site-packages路径的)

这样就完成了整个调用的过程.

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/901689.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MCP Server 开发实战指南(Python版)

原文链接:https://www.ryanzoe.top/ai/mcp-server-%e5%bc%80%e5%8f%91%e6%95%99%e7%a8%8b/ MCP 官方文档https://modelcontextprotocol.io/introduction各个 clients 对 MCP 的支持情况https://modelcontextprotocol.io/clientsMCP Python SDK:MCP Client 和 Server 官方 SDK…

Amphion 推出合成音频鉴别系统 Auditi;Gemini 引入 NotebookLM 功能,生成文档、网页音频摘要丨日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 技术 」、「有亮点的 产品 」、「有思考的 文章 」、「有态度的 观点 」、「有看点的 活动 」,但内容仅代表编辑…

洛谷题单指南-图论之树-P3398 仓鼠找 sugar

原题链接:https://www.luogu.com.cn/problem/P3398 题意解读:一颗n个节点的树,m个判断,判断树上两条路径是否相交,相交输出Y,否则输出N 解题思路:此题需要画一棵多叉树来辅助判断多次观察相交的路径,可以得出一个关键性质: 两条路径相交,必然有一条路径的LCA在另一条…

lg 主页

\(\Large\text{My Blog}\)中学:济南天山高级实验中学 关于我的学校究极久远预告:寒假游记滚滚长江东逝水,浪花淘尽英雄 是非成败转头空 青山依旧在,几度夕阳红 白发渔樵江渚上,观看秋月春风 一壶浊酒喜相逢 古今多少事,都付笑谈中街喧闹,人过往 且记曾相识,莫为少年留 …

day:25 selenium之介绍和环境配置

一、selenium介绍 selenium是一个第三方库,python有很多库; 1、什么是ui自动化? 通过模拟手工操作用户ui页面的方式,用代码去实现自动化操作和验证的行为。 2、ui自动化的优点? (1)解决重复性的功能测试和验证 (2)减少测试人员在回归测试时用例漏测和验证点的漏测 (3…

[算法学习记录] [更新中]最短路

顾名思义,最短路算法,就是求一个图中所有的点距某一个点的最短距离,常见的有Dijkstra算法、Bellman-Ford算法、Johnson算法与Floyd算法。 Dijkstra Dijistra算法实际上是一种由贪心与动态规划结合的算法,我们每次都贪心地选择到某个点的最近距离,又动态地更新着距离数组d的…

day6-static静态变量

静态变量/静态方法 被static修饰 工具类静态方法不能调用非静态。 非静态可以访问所有。 继承一个子类只能继承一个父类,可以多层继承,最大的父类为Objectcoding 练习:更好的方法:双指针不浪费空间

SpringBoot引入JWT实现用户校验

一JWT JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络应用环境间安全地传输信息。这些信息以JSON对象的形式存储在令牌中,并且可以被签名和加密。JWT通常用于身份验证和信息交换主要用途 身份验证:当用户登录成功后,服务器会生成一个JWT并返回给客户端。之后…

mcp-playwright测评

mcp-playwright介绍 mcp-playwright是一个使用 Playwright 提供浏览器自动化能力的模型上下文协议服务器。该服务器使 LLMs 能够与网页交互、截屏,并在真实的浏览器环境中执行 JavaScript。 GitHub地址:https://github.com/executeautomation/mcp-playwright。安装 npm insta…

传媒行业项目管理全解析:日事清在流程、文件、数据与风控中的一体化应用

一、关于森可文化 森可文化传媒有限公司(Senke Vision)占据了超过2800平方米的宽敞办公及拍摄场地,与众多内衣及服饰行业的上市巨头建立了不可动摇的深度合作关系。 Senke Vision汇聚了国内外顶尖的策划、设计、摄影摄像、服装搭配、化妆及品牌视觉顾问,形成了一支独一无二…

在 .NET 项目中使用 husky 完成 pre-commit 操作

将 husky 引入 .NET 项目Husky 是一个用于 Git 仓库的工具,主要用于管理 Git 钩子(hooks)。它可以帮助开发者在特定的 Git 操作(如提交、推送等)之前或之后执行自定义的脚本或命令,从而提高代码质量和团队协作效率。 主要用在前端项目中,可以通过 Husky.Net,将 Husky 的…

贸易企业数字化转型案例:基于日事清的目标管理、任务协作与流程可视化绩效优化实践

这家贸易公司如何提升内部协同效率?一、基本情况 所属行业:传统贸易行业 业务类型:国内贸易、货物及技术进出口 行业地位:拥有自己的研发人员,具备一站式解决方案能力。 合作概要:为解决组织提效,目标体系、协同体系、绩效体系的管理问题,客户与日事清达成合作,并将日…