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

1.安装pythonnet

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

GitHub:https://github.com/pythonnet/pythonnet

  • 首先打开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后问题解决。



C#调用pyd的更多相关文章

  1. python为什么是高级语言和解释型编程语言?它是如何粘合其它语言写的代码的?

    学习python之初,不知道大家对于python有没有疑惑,应当是有的.这里我整理出来了自己的一些疑惑,供大家参考. 为什么python是高级程序设计语言 ​ Java,C,C++这些语言是高级语言, ...

  2. 黑马毕向东Java基础知识总结

    Java基础知识总结(超级经典) 转自:百度文库 黑马毕向东JAVA基础总结笔记    侵删! 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部 ...

  3. 《果壳中的C# C# 5.0 权威指南》 - 学习笔记

    <果壳中的C# C# 5.0 权威指南> ========== ========== ==========[作者] (美) Joseph Albahari (美) Ben Albahari ...

  4. pyx文件 生成pyd 文件用于 cython调用

    转于:https://www.2cto.com/kf/201405/304168.html 1. 初衷 最近学用python,python不愧是为程序员考虑的编程语言,写起来很快很方便,大大节省开发效 ...

  5. 调用python 报R6034 错误

    R6034 指的是:"An application has made an attempt to load the C runtime library incorrectly. Please ...

  6. Python 调用C++

    1.C++代码提供Python需要的接口: #include "stdafx.h" #include <boost/python.hpp> #include <s ...

  7. Python和C|C++的混编(一):Python调用C、C++---Boost库

    不使用boost.python库来直接构建dll的话比较繁琐,下面实例是借助boost库实现python对C.C++的调用 1 首先确定已经安装python和boost库,本例测试环境是python2 ...

  8. python调用ice接口

    今天用python调用ice接口,遇到如下提示 ImportError: No module named Ice 解决方案是 set PYTHONPATH=C:\Program Files\ZeroC ...

  9. shell之路【第二篇】运算与文件调用

    Bash 支持很多运算符,包括算数运算符.关系运算符.布尔运算符.字符串运算符和文件测试运算符. 原生bash不支持简单的数学运算,默认都是字符串操作,但是可以通过其他命令来实现 算数运算 expr. ...

随机推荐

  1. DM9000裸机驱动程序设计

    对于任何一个硬件模块的设计,首先第一步都是要先了解硬件本身后,再开始程序的软件设计.而由于DM9000的芯片文档内容很多,要驱动好网卡,需要很长时间,特别对于新手比较困难,所以可以参考linux内核代 ...

  2. 一道算法题,引出collections.Counter的特殊用法

    题目描述: 题目编号:1002. 查找常用字符 给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表.例如,如果一个字符在每个字符串中出现 3 次, ...

  3. 2016年 实验三 B2C模拟实验

    实验三 B2C模拟实验 [实验目的] 掌握网上购物的基本流程和B2C平台的运营 [实验条件] ⑴.个人计算机一台 ⑵.计算机通过局域网形式接入互联网. (3).奥派电子商务应用软件 [知识准备] 本实 ...

  4. docker 和 k8s 调研总结

    一. docker简介 环境配置 软件开发最大的麻烦事之一,就是环境配置.用户计算机的环境都不相同,你怎么知道自家的软件,能在那些机器跑起来? 用户必须保证两件事:操作系统的设置,各种库和组件的安装. ...

  5. 1、微信小程序开发介绍。

    微信小程序如何能达到快速的开发效果,下面首先介绍一下需要的框架,使用这些框架可以减少大部分编写代码时间. 微信小程序使用的框架:weui开源框架 后端数据使用的框架(包含管理和api接口框架):YiS ...

  6. Token 、Cookie和Session的区别

    本文转至http://blog.csdn.net/tobetheender/article/details/52485948 https://blog.csdn.net/axin66ok/articl ...

  7. java9第5篇-Collection集合类的增强与优化

    我计划在后续的一段时间内,写一系列关于java 9的文章,虽然java 9 不像Java 8或者Java 11那样的核心java版本,但是还是有很多的特性值得关注.期待您能关注我,我将把java 9 ...

  8. 自定义常用input表单元素三:纯css实现自定义Switch开关按钮

    自定义常用input表单元素的第三篇,自定义一个Switch开关,表面上看是和input没关系,其实这里采用的是checkbox的checked值的切换.同样,采用css伪类和"+" ...

  9. docker启动服务

    1 rabbitmq docker启动服务---------------rabbitmq 2 mysql docker启动服务---------------mysql 3 redis docker启动 ...

  10. Docker-V 详解

      1. 作用 挂载宿主机的一个目录. 2. 案例 譬如我要启动一个centos容器,宿主机的/test目录挂载到容器的/soft目录,可通过以下方式指定:   # docker run -it -v ...