python如何调用pyd_C调用pyd

python如何调用pyd_C调用pydpython 打包成 pyd 在本篇博客不多叙述 请读者自行百度 本篇博客主要讲解在 C 中如何调用 pyd 以及遇到的一些问题如何解决 1 安装 pythonnetpyt 是一个强大的工具包 用于 C 代码与 python 代码进行交互 不仅可以实现在 C 中调用 python 也可以实现在 python 中调用 C 首先打开 nuget 包管理器 根据你 python 的版本下载对应的 pythonnet 笔者使用的是 p

python打包成pyd在本篇博客不多叙述,请读者自行百度,本篇博客主要讲解在C#中如何调用pyd以及遇到的一些问题如何解决。

1.安装pythonnet

pythonnet是一个强大的工具包,用于C#代码与python代码进行交互,不仅可以实现在C#中调用python,也可以实现在python中调用C#.

首先打开nuget包管理器:

python如何调用pyd_C调用pyd

根据你python的版本下载对应的pythonnet,笔者使用的是python3.6,所以下载的是py36。

python如何调用pyd_C调用pyd

2.调用pyd中的模块

首先引用pythonnet:

using Python.Runtime;

调用pyd的模块:

//All calls to python should be inside a using (Py.GIL()) {/* Your code here */} block.

using (Py.GIL())

{

//Import python modules using dynamic mod = Py.Import(“mod”), then you can call functions as normal.

//All python objects should be declared as dynamic type.

dynamic np = Py.Import(“test_pyd”);

np.hello();

Console.ReadKey();

}

python如何调用pyd_C调用pyd

python代码:

def hello():

print(“Hello world”)

3.可能出现的问题及解决方案

环境变量的配置,环境变量的对应路径的python版本需要与你下载的pythonnet包版本是相同的:

python如何调用pyd_C调用pyd

笔者电脑中有不同版本的python,经过笔者测试后发现更换版本最简单的方式是替换环境变量的顺序,笔者是在win10系统下进行的测试,其他系统未进行过测试。

另外要注意你的pyd如果是使用64位编译的,则环境变量对应的python版本也需要是64位的。

当python368在上时:

python如何调用pyd_C调用pyd

当python378在上时:

python如何调用pyd_C调用pyd

System.DllNotFoundException:“无法加载 DLL“python36”: 找不到指定的模块。

python如何调用pyd_C调用pyd

解决方案:将python文件夹中的python36.dll复制到debug目录下

python如何调用pyd_C调用pyd

Python.Runtime.PythonException:“ModuleNotFoundError : No module named ‘test_pyd’”

python如何调用pyd_C调用pyd

解决方案:将test_pyd.pyd放入debug目录下

python如何调用pyd_C调用pyd

System.MissingMethodException:“Method not found: ‘System.Reflection.Emit.AssemblyBuilder System.AppDomain.DefineDynamicAssembly(System.Reflection.AssemblyName, System.Reflection.Emit.AssemblyBuilderAccess)’.”

python如何调用pyd_C调用pyd

解决方案:该问题是由于.NET框架所导致的,笔者在使用.NET Core 3.1的时候就会出现这个错误,更换为.NET Framework 4.7.2后问题解决。

python如何调用pyd_C调用pyd

python如何调用pyd_C调用pyd

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/228282.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午7:23
下一篇 2026年3月16日 下午7:23


相关推荐

  • 运行时常量池与字符串常量池_常量池是什么

    运行时常量池与字符串常量池_常量池是什么文章目录1)方法区包含哪些内容?2)运行时常量池存在什么地方?3)取消永久代后,方法区的实现?4)字符串常量池和运行时常量池究竟去了哪里?4)元空间是什么?5)关于为什么移除永久代?5)补充        我们知道在JDK1.8中取消了永久代,区而代之使用了元空间来实现方法区。话虽如此,但是关于字符串常量池和运行时常量池的模棱两可的说法一直都是争论不休的。1)方法区包含哪些内容?方法区包含哪些内容,摘录自《java虚拟机规

    2022年7月28日
    8
  • DeepSeek 本地部署全攻略,新手也能快速上手

    DeepSeek 本地部署全攻略,新手也能快速上手

    2026年3月16日
    3
  • linux卸载pycharm_彻底卸载pycharm

    linux卸载pycharm_彻底卸载pycharm1.查看配置信息位置首先在解压的pycharm-2020.2.1文件夹中,查看Install-Linux-tar.txt,找到配置信息的位置(下图中蓝色标识)。2.卸载安装文件首先找到安装文件所在的目录,cd切换至其目录,然后sudorm-rfpycharm-2020.2.13.删除配置信息依次cd切换至Pycharm2020.2的位置,然后rm删除掉该用户使用记录,即能实现完全卸载。…

    2022年8月26日
    11
  • Flowable数据库

    Flowable数据库Flowable数据表清单:Flowable的所有数据库表都以ACT_开头。第二部分是说明表用途的两字符标示符。服务API的命名也大略符合这个规则。ACT_RE_*:’RE’代表repository。带有这个前缀的表包含“静态”信息,例如流程定义与流程资源(图片、规则等)。ACT_RU_*:’RU’代表runtime。这些表存储运行时信息,例如流程实例(proces…

    2022年5月11日
    32
  • 51单片机按键控制步进电机加减速及正反转

    51单片机按键控制步进电机加减速及正反转之前尝试用单片机控制42步进电机正反转,电机连接导轨实现滑台前进后退,在这里分享一下测试程序及接线图,程序部分参考网上找到的,已经实际测试过,可以实现控制功能。所用硬件:步进电机及驱动器、STC89C52单片机、直流电源1、硬件连接图注意:上图为共阳极接法,实际连接参考总体线路连接。 驱动器信号端定义:PUL+:脉冲信号输入正。(C…

    2022年6月1日
    142
  • jsonobject是什么类型_json和jsonobject区别

    jsonobject是什么类型_json和jsonobject区别JSONObject是一种数据结构,可以理解为JSON格式的数据结构(key-value结构),可以使用put方法给json对象添加元素。JSONObject可以很方便的转换成字符串,也可以很方便的把其他对象转换成JSONObject对象。一、构建json1、实例化一个JSONObject对象,用put()方法将数据写入。JSONObjectobj=newJSONObject(…

    2025年12月1日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号