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

1.安装pythonnet

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

首先打开nuget包管理器:

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

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代码:

def hello():

print("Hello world")

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

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

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

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

当python368在上时:

当python378在上时:

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

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

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

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

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

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

python如何调用pyd_C#调用pyd相关推荐

  1. python调用pyd_Python生成pyd文件

    Python的脚本文件是开源的,量化策略的安全性没有保障.因此需要保护源码.那么要对Python代码进行混淆.加密保护. 混淆代码,我准备使用pyminifier.而加密处理,就比较麻烦. Pytho ...

  2. Python Module_subprocess_子进程(程序调用)

    目录 目录 前言 软件环境 认识subprocess Popen Constructor构造函数 Class Popen的参数 args 调用程序 调用Shell指令 stdinstdoutstder ...

  3. Python:使用ctypes库调用外部DLL 数据类型对应

    Python:使用ctypes库调用外部DLL(转) 前言

  4. [Python陷阱]os.system调用shell脚本获取返回值

    当前有shell个脚本/tmp/test.sh,内容如下: #!/bin/bash exit 11 使用Python的os.system调用,获取返回值是: >>> ret=os.s ...

  5. python+opencv用电脑调用手机摄像头或其他网路摄像头

    python+opencv用电脑调用手机摄像头或其他网路摄像头 文章目录: 1 获取手机摄像头或网络摄像头的ip 1.1 获取手机摄像头的ip 1.2 获取网络摄像头的IP 1.3 关于RTSP协议 ...

  6. Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)

    Python 在子类中调用父类方法详解(单继承.多层继承.多重继承)   by:授客 QQ:1033553122   测试环境: win7 64位 Python版本:Python 3.3.5 代码实践 ...

  7. python py生成及调用pyc文件

    本文仅供学习交流使用,如侵立删!demo下载见文末 python py文件中调用pyc文件 1.生成pyc文件 # 目录下所有py文件生成pyc import compileall compileal ...

  8. Python 内部:可调用对象是如何工作的

    [这篇文章所描述的 Python 版本是 3.x,更确切地说,是 CPython 3.3 alpha.] 在 Python 中,可调用对象 (callable) 的概念是十分基本的.当我们说什么东西是 ...

  9. python函数调用的三种方式_判断python对象是否可调用的三种方式及其区别

    基本上判断python对象是否为可调用的函数,有三种方法: 1.使用内置的callable函数 callable(func) 用于检查对象是否可调用,返回True也可能调用失败,但是返回False一定 ...

  10. python c 语言接口,## 人生苦短我用python[0x08] 使用ctypes调用c语言接口 ##

    文章内容为原创,欢迎转载请注明出处 作者: EflyPro->晦明禅师 1.背景 python作为解析语言大规模应用在各个领域,c语言作为系统级别的语言广泛应用在基础,系统,网络等底层服务当中, ...

最新文章

  1. 干货 | AI 工程师必读,从实践的角度解析一名合格的AI工程师是怎样炼成的
  2. PCA主成分分析+SVM实现人脸识别
  3. open、read、write、文件类型
  4. debian 安装 php,Ubuntu/Debian上安装Nginx+php环境详细教程
  5. SQL的3种连接查询
  6. sysbench线程数_分享3个Sysbench性能压测脚本及多并发压测过程
  7. boblog任意变量覆盖漏洞(二)
  8. 华为海思K3平台总体特性
  9. Pr 入门教程如何修改过渡效果设置?
  10. java学习总结(16.05.25)eclipse的查找和替换功能 Ctrl+F
  11. 平面设计必备学习软件
  12. 你天天努力的碎片化学习,为什么还在每天挤地铁?
  13. 边缘计算(雾计算)——AI+IoT的热词
  14. 最新版树莓派3A+ 开箱简介
  15. 响应式织梦模板家政服务保姆月嫂类网站
  16. 有限状态机FSM(finite state machine) 二
  17. 互联网日报 | 6月24日 星期四 | 快手全球月活已达10亿;HarmonyOS 2首批正式版升级;微软市值突破2万亿美元...
  18. 黑马程序员——C语言基础--数组和字符串
  19. CS/BS架构是什么?以及他们的区别
  20. 微型计算机简单并行接口实验心得,实验二 简单并行接口

热门文章

  1. java苹果沙盒验证参数问题_java -苹果支付凭证校验
  2. 基于STM32f407的TSL2561模块的使用
  3. 物联网微生态系统-鱼缸
  4. aid learning安装应用_aidlearning下载-Aid Learning 安卓版v0.80-PC6安卓网
  5. 为何淘宝上的假货打不完?
  6. python3单例模式_python3中的单例模式Singleton
  7. 为了讨好大舅子,程序员竟当场学起了外挂???
  8. java 加载3d模型_实现在Java 3D中载入外部3D模型文件方法详解
  9. 学单片机有前途还是嵌入式系统有前途?
  10. ROC、PR曲线、AUC值