pythonnet-C#调用python脚本-含matplotlib+biopython

news2024/9/22 1:15:53

本地环境:
win10,.NET Core 6,Python 3.9.13,pythonnet 3.0.3
测试的包:biopython 1.82,matplotlib 3.5.2

参考:

GitHub - pythonnet/pythonnet: Python for .NET is a package that gives Python programmers nearly seamless integration with the .NET Common Language Runtime (CLR) and provides a powerful application scripting tool for .NET developers.
https://github.com/pythonnet/pythonnet

Python for .NET — pythonnet 2.4.0 文档
https://dev.listera.top/docs/pythonnet/pythonnet.github.io.html

C#/.net程序调用python - 步、步、为营 - 博客园
https://www.cnblogs.com/qsnn/p/17168273.html

Python报错"it could not find or load the Qt platform plugin “windows”-CSDN博客
https://blog.csdn.net/u011732358/article/details/103065543


目录

  • 问题描述
  • 安装
  • 使用
  • 报错
    • 找不到包
    • cannot find or load the Qt platform plugin
    • 查找python包的安装位置

问题描述

为了跟同事对接,需要在C#里调用python脚本。

之前写过一篇C#调用python的,但是IronPython调用第三方库有问题,当时是使用远程调用的办法。
c#远程调用linux服务器的Python脚本_c#远程登录其他服务器执行脚本-CSDN博客
https://blog.csdn.net/pxy7896/article/details/121473815

现在有了一个更好的工具pythonnet。

它的优势是可以直接在C#代码里调用本地python脚本,而这个脚本可以放在任何位置,并且可以使用第三方库。我测试用的脚本用到biopython包解析文件,然后使用matplotlib包绘制图像,输出完全符合预期。

安装

在.Net 项目中使用NuGet安装包:
在这里插入图片描述

使用

在项目的入口里写:

    static void Main() {
        string pathToVirtualEnv = "D:\\ProgramData\\Anaconda3";
        Runtime.PythonDLL = Path.Combine(pathToVirtualEnv, "python39.dll");
        PythonEngine.PythonHome = Path.Combine(pathToVirtualEnv, "python.exe");
        PythonEngine.PythonPath = "path/to/脚本;xxx/xxx/xxx";
        PythonEngine.Initialize();
        using (Py.GIL())
        {
        	// 基础测试
            //dynamic hello = Py.Import("test");
            //hello.hello();
            
            // 测试numpy
            //dynamic np = Py.Import("numpy");
            //Console.WriteLine(np.cos(np.pi * 2));
            
            // 真实测试
            dynamic draw = Py.Import("drawABI");
            draw.drawGraph("path/to/ab1/xx.ab1", "313", "path/to/out.png");
        }
	}

注意:

  1. pathToVirtualEnv是python解释器所在的位置,可以使用虚拟环境,方便管理;
  2. PythonEngine.PythonPath里写的是:a)要执行的脚本的位置;b)python包的位置。如果有找不到包的情况,我的解决方案是把sys.path里所有的路径都加到这里。路径之间用;分割;
  3. 基础测试里,我是将一个叫test.py的脚本放在path/to/脚本路径下,其内容如下:
    def hello():
    	import sys
    	print(sys.path)
    
    所以正确执行的话,控制台会打印sys.path
  4. numpy就是调用numpy做计算,正确执行的话,输出1.0
  5. 真实测试是,我有一个脚本叫drawABI,也放在path/to/脚本路径下,其中包含一个函数drawGraph,接收三个参数,最终输出一副图像out.png。

报错

找不到包

首先检查是否正确安装了。如果c#外可以正常执行,那么可以考虑将sys.path里所有路径都加入PythonEngine.PythonPath

正常来说是将LibLib\site-packages加入就可以了,不过我把所有加入了才解决问题。。可能是我的biopython装得位置比较奇怪。

cannot find or load the Qt platform plugin

在这里插入图片描述
这个一般是PyQt5没装好。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyqt5

查找python包的安装位置

# 没安装好
pip show PyQt5
WARNING: Package(s) not found: PyQt5

# 安装好了
(base) C:\Users\xxx>pip show biopython
Name: biopython
Version: 1.82
Summary: Freely available tools for computational molecular biology.
Home-page: https://biopython.org/
Author: The Biopython Contributors
Author-email: biopython@biopython.org
License:
Location: c:\users\xxxx\site-packages
Requires: numpy
Required-by:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FPGA 如何进入 AI 领域的思考

FPGA在AI领域如何发力,如何抢碗饭吃?大多数提到是硬件加速,在AI工程里,完成数据前处理(加速)。大家很少提到AI模型的本身的推理过程,让FPGA成为AI模型的推理/算力芯片,这自然是 FPGA…

家校互动实现方案

目前,家校互动正成为最重要的校园场景之一。 大家都知道我主要做萤石的二次开发,这边也是给出了一个利用萤石开放平台的解决方案。 主要功能如下: 1.门禁管理,告警推送 2.可多人通过小程序看画面 3.电子班牌-父母微信一键通话…

第二代骁龙8平台手机nubia Z5拆解

这周末,除非外面下钞票,否则谁也拦不住我玩《黑神话悟空》(附:两款可以玩转悟空的显卡推荐) 天玑助力联发科力压高通~探秘MTK 5G旗舰智能手机SoC芯片——MT6989(天玑9300) 第二代骁龙8平台手机…

html+css+js网页设计 个人博客10个页面

htmlcssjs网页设计 个人博客10个页面 网页作品代码简单,可使用任意HTML编辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1&#xf…

图像基础(2)视频信号和图像数字化的理论

#灵感# 继续读书,主要是视频信号相关。 视频实际上是按时间轴排列的一组图像序列。模拟图像在空间位置上有连续性,每一个位置上光的强度变化也有连续性。 1、视频信号分为3类: 分量视频、复合视频、S-Video. 分量视频是将原始视频信号&am…

无人机的工业应用场景

一、监测与检查 电力巡检:工业无人机在电力巡检中发挥着重要作用,能够替代人工进行高空、高风险作业,提高电网巡视效率,降低运维成本。通过搭载高清相机、红外热成像等设备,无人机可以实时传输电力线路状态&#xff0…

开放式耳机哪个品牌的好用?热榜口碑开放式耳机测评集锦!

现在市面上的开放式耳机真的越来越多,但是开放式耳机哪个品牌好用呢?可能不了解开放式耳机的就会开始犯难了,所以到底该怎么样选择才能选出一款比较适合自己的开放式耳机呢?根据这个问题,我作为一名耳机测评师&#xf…

【操作系统】实验:文件系统

目录 一、实验目的 二、实验要求 三、实验步骤 四、核心代码 五、记录与处理 六、思考 七、完整报告和成果文件提取链接 一、实验目的 1、掌握文件系统的基本结构和文件系统的管理方法 2、加深对两级文件目录认识和理解 3、对文件操作的系统命令实质内容和执行过程深入…

python例子:使用pygame实现五彩烟花

作品介绍 作品名称:使用pygame实现五彩烟花 开发环境:PyCharm 2023.3.4 python3.7 用到的库:pygame、random、sys、math 作品简介:该实例是一个使用 Pygame 库实现的烟花效果模拟程序。 实现过程 一、初始化Pygame pygame.…

如何在没有密码的情况下从 iPad 中删除 MDM?100% 工作

如果您遇到已使用远程管理锁恢复的 iPad 或 iPhone,您将需要远程管理器的登录信息。 从 iPad 中删除 MDM可能很困难,尤其是在您没有正确的权限的情况下。在寻求帮助时,许多客户访问 Apple 的官方论坛,却发现问题并不总是容易解决。…

java中的原子性

在Java中,原子性(Atomicity)是并发编程中的一个核心概念,指的是一个或多个操作在中间状态对其他线程不可见,且不可被线程调度机制中断的性质。一个原子操作要么全部执行成功,要么完全不执行,不会…

第136天:内网安全-横向移动资源约束委派

利用条件 首先是dc域控主机必须是win2012以上的主机 其次是域内有一个账户,可以同时登录两台主机 利用 jie 可以登录 win2008 也可以登录 win7 资源委派不需要设置委派,默认即可 实验复现 复现环境 通过网盘分享的文件:136-xiaodi.local…

天宝TBCTrimble Business Center中文版本下载安装使用介绍

天宝TBC:测绘之道,尽在其中 引言 昔日杜甫,忧国忧民,今朝我辈,测绘天下。天宝TBC,乃测绘之利器,助我等行走于山川河流之间,绘制天地之图。此文将以杜甫之笔,述说TBC之妙…

C_05_编译4阶段

c语言编译的4个阶段:预处理、 编译、 汇编、 链接 预处理阶段会在源代码中查找预编译指令,其中主要是头文件展开(include),宏定义(defind),选择性编译(ifdef)三种指令 预…

【ArcGIS/GeoScene Pro】离线许可归还不了

问题: 解决方案: 将一下项置空即可,让后重新获取许可信息

网络安全售前入门01——产品了解

目录 1.概述 2.常见网络安全产品 2.1下一代防火墙(NGFW) 3.后续 1.概述 为方便初入网络安全售前工作的小伙伴了解网安行业情况,我制作一系统售前入门(安全产品,安全服务,法律法规等)介绍&am…

AI创新,DataOps聚能 | 白鲸开源DTCC共话DataOps新篇章

近日,由IT168联合旗下ITPUB、ChinaUnix两大技术社区主办的第15届中国数据库技术大会(DTCC 2024)隆重召开。大会以“自研创新 数智未来”为主题,吸引了数百位行业专家和广大数据领域从业者共聚这场年度数据库技术交流盛宴&#xff…

vs2019 C++ 无法定位程序输入点于动态链接库

问题 一个项目一段时间没运行后,再运行报以下错误: 无法定位程序输入点??0lnferenceEngineExceptiondetailslnferenceEngine QEAAAEBV? b a s i c s t r i n g D U ? basic stringDU? basicstringDU?char traitsDstd v?$allocatorD2 stdHOZ 于动…

解决 python import 报错问题

需求问题描述 期望用Python写工具,转换excel内容合并到xml中,需要用到 openpyxl & lxml 库,因此需要安装。 import openpyxl 提示报错,但是没有像java代码的解决方案推荐,即无法直接导包。 分析记录 Note&#…

React antd 表格嵌套表格(可展开)

注意: 采用的是React antDsign 4.x版本 实现效果 代码实现 import { Space, Table } from antd; import React, { useRef } from react;const CheckList () > {const data [{id: 1,name: 张三,age: 18,content: [{id: 1-1,text: 我叫张三,},],},{id: 2,name:…