python pyd 速度提升_pyd打包补充

网上说的将python代码,通过Cython打包成pyd的教程挺多,好处也多,主要有两个:

1.隐藏代码

2.加速运行速度

补充两点:

1.打包脚本配置

__build__.py

1 from distutils.core importsetup2 from Cython.Build importcythonize3 importfilemanager, os4

5 filelist =[]6 folders = [".\\"] #".\\utils",

7 excludes = [ "__init__", "__build__", "u3dNameRes"]8

9 for rootpath infolders:10

11 alllist = filemanager.getFileList(rootpath, ".py")12 for file inalllist:13 if not any(ex in file for ex inexcludes):14 filelist.append(file)15

16 setup(17 name = 'any words.....',18 ext_modules = cythonize(filelist, compiler_directives = {'language_level': 2}),19 )

filemanager.getFileList 是工具类,用来获取某目录下,指定后缀的文件列表

make.bat

1 @echo off

2 set libname=u3dnamedres3 remif exist build ( rd build /s /q )

4 python __build__.py build_ext --inplace5 xcopy %libname% .\ /s /e /y6 rd %libname% /s /q7 pyinstaller -F u3dNameRes.py8 del *.pyd /s /q9 del *.c /s /q

第4行是生成pyd文件

这里有个特别要注意的点,就是不同目录下的py文件,一定要在目录下加上__init__.py,然后在里面引用你的py文件。

引用的路径只需要写到模块下的目录,不要把模块的名字也加到最前面去。

不然,等会生成的pyd文件会变成在根目录下,导致编译exe的时候,找不到pyd文件。这点非常重要。

2.加载的两种方式

1)直接引用

直接引用就是跟平时写代码的一样,直接import .... 或者是 from xxxx import .... 又或者是import xxxx as yyy即可

2)外部加载

获取查找文件的方式,并配合pkgutil.iter_modules,把pyd加载到内存里面。

1 defloadpys(dirs):2 ifisinstance(dirs, str):3 dirs =[dirs]4

5 if os.getcwd() not insys.path:6 sys.path.append(os.getcwd())7 for path indirs:8 prefix = path + "."

9 roots = [ "%s%s%s" % (p, os.sep, path) for p insys.path]10 for _importer, modname, _ispkg inpkgutil.iter_modules(roots, prefix):11 try:12 if_ispkg:13 module = __import__(modname, fromlist = ["__init__"])14 else:15 module = __import__(modname, fromlist =True)16 exceptException as e:17 raise Exception("import failed %s" %modname)18 else:19 yield module, modname

这方法同样适用于加载exe外部的pyd文件。

另外,如果说是外部加载的pyd,要在pyinstaller打包的时候,也打进exe的话,需要进行以下步骤:

1.先跑一遍pyinstaller -F xxxx.py,生成 xxxx.spec

2.然后修改xxxx.spec,把要打包进去的pyd文件,添加到配置datas=[('*.pyd', '.\\proxy\\')]

3.然后再生成打包,用命令 pyinstaller -F xxxx.spec

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值