win10 下pycharm+anaconda 编译生成pyd文件

由于生产部署的问题,需要把用python写的深度学习代码编译为可被调用的文件。上网搜索了下,暂时了解到win10下pyd文件比较流行。下面是直接引用某位博主的结论,个人感觉总结的很好。其中Cython库将已有的Python代码转化为C语言的代码,并作为Python的built-in模块扩展。

Python的文件类型介绍:

.py       python的源代码文件

.pyc     Python源代码import后,编译生成的字节码

.pyo     Python源代码编译优化生成的字节码。pyo比pyc并没有优化多少,只是去掉了断言

.pyd     Python的动态链接库(Windows平台)

.py, .pyc, .pyo 运行速度几乎无差别,只是pyc, pyo文件加载的速度更快,不能用文本编辑器查看内容,反编译不太容易

一、系统环境

win10 64位+anaconda的python环境(此处对应envs为tf_2c)+pycharm

 

二、利用cython创建pyd文件

先安装cython,如果在线安装不了,在https://www.lfd.uci.edu/~gohlke/pythonlibs/下载后本地安装即可。

1.编写一个测试代码文件utils.py放在。。。/pyd_test这个project中

class utils:def fun_Hello(self, s):return s

2.在pyd_test这个project中创建一个setup.py文件

from setuptools import setup
from Cython.Build import cythonizesetup(name='test',ext_modules=cythonize('utils.py'),
)

3.在pycharm命令行调用

进入tf_2c这个虚拟环境中(必须进入该环境中,不然无法调用相应的库)

在terminal中回到当前的project路径,输入以下cmd命令:

python setup.py build_ext --inplace

编译成功后可以看到,project中会出现对应的.c和.pyd文件,如下图所示:

备注:在anaconda prompt中打开对应envs和路径,输入同样的cmd命令亦可实现。

三、测试

在对应的project中创建一个test.py文件,输入以下代码,编译

from utils import utilsif __name__ == '__main__':obj1 = utils()print(obj1.fun_Hello("pyd测试"))

若出现对应字符就为编译正确如下图所示:

注意:

terminal一定也要进入对应的envs,不然无法调用cython。由于之前一直使用anaconda中的spyder作为IDE,没用过pycharm,在此处被坑了一个上午。望后来者引以为戒!

参考文献:

https://blog.csdn.net/feijiges/article/details/77932382

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

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

相关文章

JVM(4)之 使用MAT排查堆溢出

为什么80%的码农都做不了架构师?>>> 接下来讲解如何设置以及当发生堆溢出的时候怎么排查问题。先看一小段代码:   代码中使用了一个无限循环来为list添加对象,如果采用默认的堆大小的话可能要等待好久才能出现堆溢出的错误&a…

caffe 中的一些参数介绍

转自:http://blog.csdn.net/cyh_24/article/details/51537709 solver.prototxt net: "models/bvlc_alexnet/train_val.prototxt" test_iter: 1000 # test_interval: 1000 # base_lr: 0.01 # 开始的学习率 lr_policy: "step" # 学习率的…

python 制作二进制文件数据集(bin)

为了方便进行深度学习的程序调用与实现,需要将excel的数据文件转换为二进制文件。好处就是接口统一,读写速度快,节约空间。 一、调用库 使用xlrd读入execel表格,经过处理后转换为对应的dataframe结构,再使用pickle库…

远程连接mysql数据库注意点记录

一、如何新建独立帐号并设置权限 这里我使用Navicat作为我的数据库管理工具,打开Navicat。 选择“用户”--“新建用户” 输入用户名、主机、密码,需要注意的是,主机那不是写“localhost”,而是写“%” 然后可以设置“服务器权限”…

【域控管理】父域的搭建

从这篇博文开始,所有的域控系统都是在虚拟机中创建的。 在VM里安装Windows Server 2008 R2的方法就不多说了,无脑式安装,略过不提。 进到系统桌面,打开本地连接,设置网卡的IP地址,如下图: 注意&…

tensorflow2 tensorboard可视化使用

tensorflow2自带tensorboard,所以不必再自行安装tensorboard。 一、使用环境 win10 x64; anaconda3tensorflow2(cpu版本) 二、使用 1.在模型训练之前插入以下代码 log_dir os.path.join(logs) #win10下的bug, if…

IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)...

首先了解一下CGContextRef: An opaque type that represents a Quartz 2D drawing environment. Graphics Context是图形上下文,可以将其理解为一块画布,我们可以在上面进行绘画操作,绘制完成后,将画布放到我们的view中显示即可,view看作是一个画框. 自己学习时实现的demo&…

eclipse maven jetty插件方式启动项目

2019独角兽企业重金招聘Python工程师标准>>> 1. 2.点击run即可启动项目 参考:maven命令具体含义请自行百度.例子:maven clean的作用 / maven djetty 转载于:https://my.oschina.net/u/3146772/blog/1576710

AWS S3 Windows系统下的文件夹上传基于python

AWS S3 上传文件,基于cmd命令行发现无法上传文件夹,只能上传单个文件,不知道是我能力不行还是什么原因,如果有大佬了解的可以在下面评论下! 一、环境配置 1.win10 X64; 2.awscli 1.18.91 3.python(程序…

windows系统环境变量过长解决方案(PATH too long installer unable to modify Path)

在按照官方文档安装PCL库时,发现如下danteng的错误,内心极度崩溃!以前也遇到过,当时暂时解决了该问题,现在又遇到了重新解决一次,为了方便以后遇到该问题时不再不知所措,现做个笔记!…

【数据结构作业—02】双链表

2.实现下述要求的Locate运算的函数 问题描述 设有一个带表头结点的双向链表L,每个结点有4个数据成员:指向前驱结点的指针prior、指向后继结点的指针next、存放数据的成员data和访问频度freq。所有结点的freq初始时都为0。每当在链表上进行一次Locate (L,…

第9章 接口

1、抽象类: 包含抽象方法的类叫抽象类,如果一个类包含一个或多个抽象方法(abstract void f();),该类必须被限定为抽象的,否则编译出错。 1、抽象类不能被实例化,实例化的工作应该交由它的子类来完成,它只需…

用node-webkit(NW.js)创建桌面程序

以往写windows桌面程序需要用MFC、C#之类的技术,那么如果你只会web开发技术呢?或者说你有一个网站,但是你想把你的网站打包成一个桌面应用程序,该如何做呢? 答案就是用node-webkit这个开源框架,他封装了web…

kindeditor用法简单介绍(转)

1,首先去官网下载http://www.kindsoft.net/ 2,解压之后如图所示: 由于本人做的是用的是JSP,所以ASP,PHP什么的就用不上了,直接把那些去掉然后将整个文件夹扔进Myeclipse,如图: 里面有个报错&am…

SOLIDWORKS——参数化建模

https://www.sohu.com/a/259742200_100042821 知识点:投影曲线、曲面填充、扫描、外观设置 建模步骤 1.先在工具——方程式里输入一个直径的变量A120 。 2.在前视基准面上草绘圆,画一条直径。直径等于变量A。 3.旋转,选择粉色区域。 4.上视…

Androd安全——反编译技术完全解析

0.前言单纯从技术角度上来讲,掌握反编译功能确实是一项非常有用的技能。另外既然别人可以反编译程序,我们当然有理由应该对程序进行一定的保护,因此代码混淆也是我们必须要掌握的一项技术。看完此篇如果对代码混淆也感兴趣&#x…

python——shape 与reshape

转载自:https://blog.csdn.net/u010916338/article/details/84066369 shape()和reshape()都是数组array中的方法 numpy中reshape函数的三种常见相关用法 numpy.arange(n).reshape(a, b) 依次生成n个自然数,并且以a行b列的数组形式显示np.arange(16).reshape(2,…

误删了microsoft visual c++后如何正常运行matlab

误删了microsoft visual c后如何正常运行matlab 本人在卸载visual studio2013的时候,因为这个软件卸载的过程中出现一些问题,误将visual c当成VS的组件一同删除了。但是在打开matlab 时发现出错,matlab打开后会出现下面的界面。 出现这个问题…

iScreenLocker 3.1.8 安卓锁屏通知--苹果一样的体验

*软件介绍:苹果锁屏通知(iScreenLocker)是一款android上ios风格的锁屏软件。它颠覆安智通知设计,将原来状态栏的通知搬到锁屏界面上来,能够在桌面轻松收发短信,微博,微信等消息。它独有的消息唤醒功能。能使手机从待机界面唤醒而消耗非常少的电量。手指轻…

JSP慕课网阶段用户登录小例子(不用数据库)

getAttribute和setAttribute一起使用,而getParameter用于取得如request传来的参数。 Web是请求/响应架构的使用,而request和response就是在服务器端生成的相应的两个对象,request能够获取客户端传递的参数及相关的一些信息,而resp…