python怎么生成dll,python怎么生成随机数

  python怎么生成dll,python怎么生成随机数

  

  使用python创建生成动态链接库dll

  如今,随着深度学习的发展,python已经成为深度学习研究的第一语言。大多数深度学习工具包都有python版本,很多重要的算法都有python版本。为了将这些算法应用到具体的项目中,这些工具包还提供了不同类型的接口。

  动态链接库(。dll,所以)是系统开发中跨语言协作的一种非常重要的方式。用python语言编写的算法编译成动态库,可以被其他语言调用,可以大大提高算法开发的效率。

  但是,虽然python可以调用其他语言生成的动态库,但是python本身作为脚本语言,并不能直接编译生成动态库。为了生成动态库,我们使用cython将python脚本转换成C语言文件。通过一个简单的例子说明具体过程。

  defstr_add(str1,str2):

  代码returnint(str1) int(str2)将两个数字的字符串转换成数字,并对它们求和。让我们将这段代码保存为run.py供以后使用。根据cython的语法,我们给出cython版本的函数:

  cdefpublicstr_add(str1,str2):

  与之前的python版本相比,returnint(str1) int(str2) cdef替换了def,并添加了public关键字来表示这个函数是要导出的。将这段代码保存为pyx文件,例如run.pyx

  相关:《Python教程》

  接下来,我们执行以下命令,将这段代码转换成C语言版本:

  Cythonrun.pyx此时目录下诞生了run.h和run.c两个文件。这两个文件通过调用python的C-API实现了run.py代码的功能。

  接下来,我们编写动态库的主文件dllmain.c:

  #includePython.h

  #includeWindows.h

  #包含“run.h”

  extern _ _ declspec(dll export)int _ _ stdcall _ str _ add(const char * a,constchar*b){

  returnPyLong _ AsLong(str _ add(py unicode _ from string(a),py unicode _ from string(b)));英国铁路公司

  }

  BOOLWINAPIDllMain(hinstanceinstdll,DWORDfdwReason,LPVOIDlpReserved){

  开关(fdwReason){

  caseDLL_PROCESS_ATTACH:

  py _ Initialize();

  py init _ run();#dll在初始化时被调用。python3就是这么写的,python2改成,initrun()。查看生成的run.h

  打破;

  caseDLL_PROCESS_DETACH:

  py _ Finalize();

  打破;

  }

  returnTRUE

  }这个文件定义了导出函数_str_add。在python中,所有数据都存储为pyobject。该函数通过PyUnicode_FromString将两个字符串转换为python对象类型,调用run.h中的函数str_add进行求和,通过PyLong_AsLong函数将python对象的结果转换为整数。

  我们可以通过以下命令编译这段代码来生成dll:

  CL/LD DLLMAIN。克鲁恩。c-IC 3360 \ python 36 \ include c 3360 \ python 36 \ libs \ Python 36 . lib这里Python的路径,根据Python在不同电脑中的安装位置,要做相应的调整。

  生成dll,让我们编写一个简单的调用并测试它:

  #包含“stdio.h”

  #包含“stdlib.h”

  extern _ _ declspec(dll export)int _ _ stdcall _ str _ add(const char * a,const char * b);

  #pragmacomment(lib, dllmain.lib )

  intmain()

  {

  printf(%d\n ,_str_add(123 , 456 );

  return0

  }输出结果:579,正好等于123 456。

  通过以上步骤,我们已经能够将python代码实现的功能封装成一个动态库。然而,这个动态库不能在没有安装python的机器上运行。事实上,python代码通常需要许多依赖包才能运行。此外,每段代码需要不同的依赖包。为了找到这些包,我们使用另一个工具pyinstaller。具体步骤如下:

  (1)virtualenv envpack #创建新环境,python包依赖复杂,创建新环境可以减少最终引入的包;

  (2)cd envpack #进入目录;

  (3)#将run.py复制到这个目录。run.py所需的包与最终dll所需的包相同;

  (4)Scripts\activate #激活并切换到virtualenv环境;

  (5)pip install pyinstaller #安装打包工具py installer;

  (6)pip安装numpy #安装numpy等脚本需要的库,检查你的导入;

  (7)pyinstaller run.py #打包命令;

  (8)8)Scripts \ deactivate #打包成功后,使用命令停用环境;

  (9)要打包的文件在envpack\dist,包括很多。dll和。pyd文件。只需将这些文件与dll一起发布。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: