前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >.NET Core奇技淫巧之WinForm使用Python.NET并打包

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

作者头像
GuZhenYin
发布于 2025-03-20 05:46:40
发布于 2025-03-20 05:46:40
9600
代码可运行
举报
文章被收录于专栏:GuZhenYinGuZhenYin
运行总次数:0
代码可运行

前言

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

但是只能导出execl表格.

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

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

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

正文

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

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

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

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

1.下载嵌入式的python

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.\python.exe get-pip.py
  • 然后执行命令: 这样,我们就发现pip可以正常使用了
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.\python.exe -m pip

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.\python.exe -m pip install --upgrade pandas -t Lib\site-packages\
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.\python.exe -m pip install --upgrade openpyxl -t Lib\site-packages\

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

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

类似如图:

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

如图:

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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语句,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        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路径的)

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.下载嵌入式的python
  • 2.处理嵌入式的python无法使用pip的问题
  • 3.通过pip命令下载所需的包.
  • 4.将安装好包的python目录复制到Winfrom项目下,并设置复制到输出目录.
  • 5.通过Nuget安装Python.NET包.
  • 6.编写WinFrom加载和点击事件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档