Pyinstaller编译包含了pymssql包报错的问题解决方案py3.6

Python程序打包经常会用到Pyinstaller这个工具,打包成一个独立的exe程序用于发布,这样就不用在目标机上部署Python的一整套环境,但笔者在测试的时候发现,写一个测试程序,打包后无故障运行,但一旦用了pymssql这个包,也就是要连SQL server的时候,就出问题了,打包可以成功,但程序就是无法运行,会报错,ImportError: No module named _mssql,可以定位到问题就出在pymssql这个包上,注释掉数据库连接就OK了,在百度了一番之后,找到一个解决方案:

https://blog.csdn.net/m0_37509180/article/details/72576177

方案的来源是一个老外写的一段话:

Just as a suggestion, put an import decimal at
the top of your program. It looks like _mssql
might be doing dynamic imports in __load method
which will "confuse" py2exe because it can't
know about dynamic imports which happen at
runtime.

大意就是打包的时候,打包程序无法判断动态调用,_mssql是动态调用的,就是用才调用,不会一开始就调用,于是打包程序就不知道要不要包进exe里面,估计打包的时候不会去尝试运行pymssql里面的函数,因此也无法得知动态调用的模块,于是乎,老外给的解决方案就是在程序最开始手动调用,为了最小的程序开销,调用一下模块的版本信息就可以了,就如下面几句代码,程序直接调用,Pyinstaller或者py2exe就会把这些模块都放到包里去了,这样在运行exe的时候就不会提示缺模块了。

import _mssql
import decimal
import uuid
_mssql.__version__
decimal.__version__
uuid.ctypes.__version__
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值