python 3.8.5 打包_python之cython(pyd)兼容xp和win7以上的解决方案

为什么使用pyd?为了保护py源代码。

本文要解决的问题是什么,就是生成一个可以在xp 32位以及win7 及64位,win10 64位,windows主流平台都可以正常运行的 独立发行包。

环境要求:

python版本:3.4.3(32位)是最后一个支持xp的版本。

cython版本,0.29.14最新(2020年时可用)

pyinstaller版本,3.5

{更正:并不需要安装vs2005的包。2020-02-03}

//vcredist.msi vs2005(运行时包)即使你是64位的win7或是win10也要安装,否则提示安装不正确(指的是vc包,或是提示 并行的 XXX)

关于pyd的编译。本身利用cython的通用方法,编译本身没有什么神秘。

前期需要搞定的就是 vcrsall.bat的查找问题。这个网络上有很多,就不多说。

vs2008,在xp上还有很多细节。一是正版化cdkey(无难度)

后面的工作:

1.使用 cython编译,会出现 basestd.h找不到,我的办法就是全盘搜索然后硬复制到python 3.4的include目录下。

2.kernl32.lib找不到,复制到 python3.4的libs下(是libs不是lib),遇见什么解决什么。

cl.exe找不到,这里需要 path= cl.exe 的实际目录 ;%path%

多运行几次就可以编译了。

为什么使用vs2008,为了兼容性,原来使用的cpp tools,结果带了一大堆的sdk,而这些在xp根本安装不上。

综上所述,我们为了减少依赖,使用的是msvcr90.dll

在pyinstaller中,我们使用 -D参数打包成一个目录,因为如果-F的话,如果生成的exe比较大的话,每次有一个解压流程,200多M的话,对于配置低的机器来说过于缓慢。

XP上的运行,会发现pyd模块无法import

import error : dll 无法加载。

d80838fc2d37c2d9ee6b73ec4ac131cc.png

上面的错误是我自己的代码捕捉的。

try

dll包的引入

这时我们需要将

msvcm90.dll

msvcp90.dll

msvcr90.dll

Microsoft.VC90.CRT.manifest

打包到 目录中,也可以复制到目录中

但是还是不能运行。

提示的是 c++ runtime 载入错误。R6034。

24d0ff61de81d76bc6c5468c5a23ff52.png

这是因为pyinstaller打包来的是manifest在使用了cython编译的pyd,必须要覆盖一下原程序名称.exe.manifest

**我们只需要将Microsoft.VC90.CRT.manifest,再复制一份,改名为上面文件。而原来的也绝不能删除。**

切记!切记!此步骤是要pyinstaller -D生成的目录下,手工操作的。

完成上面所有的步骤后,xp,win7,win10下正常运行 vs2008编译的pyd,无视 32或是64位。

如果对你有帮助,希望可以关注我,并为我点赞。

python路上慢慢的探索,有缘的人得之。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值