本文介绍一个exe打包工具pyinstaller,使用非常简单,方便,而且还跨平台。
软硬件环境
-
<李> Windows 64位李>
<李> PyQt5李>
<李>蟒蛇与python 3.6.5李>
<李> pyinstaller李>
<李> apscheduler李>
<李> sqlalchemy李>
pyinstaller安装
命令行中执行
pip安装pyinstaller
pyinstaller打包exe
示例还是以之前的为例,解压进入工程目录,命令行执行打包命令
pyinstaller - f——distpath释放main.py
其中释放是目标文件夹,main.py是工程入口文件,- f表示生成一个可执行文件。
pyinstaller的打包参数很多,需要的话通过帮助来查看
pyinstaller - h
子流程打包问题
在打包包含subprocess.Popen时发现,加上参数——noconsole时产生的exe文件在运行的时候,进程并没有正确运行。比如需要利用subprocess.Popen创建一个进程去执行一个命令行操作,
mProcess=subprocess.Popen (cmd, stdin=子流程。DEVNULL stdout=子流程。管,stderr=subprocess.STDOUT universal_newlines=True)
引用>pyinstaller打包操作命令如下
pyinstaller - f——noconsole——清洁——distpath释放main.py打包后生成的exe,可以运行,不过查看进程并没有如预期正确地工作。
解决方法是在创建进程时,加上startupinfo参数,如下
如果=subprocess.STARTUPINFO ()
si。dwFlags |=subprocess.STARTF_USESHOWWINDOW
mProcess=subprocess.Popen (cmd, stdin=子流程。DEVNULL stdout=子流程。管,stderr=subprocess.STDOUT universal_newlines=True, startupinfo=si)
引用>问题完美解决,具体可以参考文末的资料
apscheduler打包问题
项目中用到了apscheduler这个库,用来做定时任务非常的好,使用也很简单,不过在pyinstaller打包的时候,出现了如下错误
解决方法是,编辑文件<代码>/usr/地方/lib/python3.5/dist-packages/apscheduler __init__ . py 代码>
4.0 #这些将被删除在APScheduler。
#释放=__import__ (pkg_resources) .get_distribution (APScheduler) .version.split (“-”) [0]
# version_info=元组(int (x)如果x.isdigit()其他x x release.split (' . '))
#版本=__version__='。' . join (str (x)对x version_info [3])
释放=(3,- 3,- 1)& # 160;
version_info=' 3.3.1 ' & # 160;
版本=' 3.3.1 '
引用>3.3.1是我安装的apscheduler的版本号,视实际情况修改。
接下来创建一个名称为hook-ctypes.macholib.py,内容如下
# - * -编码:utf - 8 - * 从PyInstaller.utils。钩子进口copy_metadata 数据=copy_metadata (apscheduler)最后执行打包命令
pyinstaller - f——清洁——additional-hooks-dir钩子——distpath释放main.pysqlalchemy打包问题
在用pyinstaller打包一个使用了sqlalchemy库的python3工程中,碰到了打包后的可执行文件报错的问题,如下图所示
解决方案是,将sqlalchemy.dialects中的mysql引入,然后采用mysql + pymysql的方式打开数据库,代码如下
进口pymysql 从sqlalchemy进口create_engine sqlalchemy。orm进口sessionmaker sqlalchemy。方言进口mysql 用户名=' xugaoxiang ' passwd=' 123456 ' 服务器=' 192.168.0.100 ' 端口=' 3306 ' dbname=' djdb ' cmd_connect=' mysql + pymysql://{}: {} @ {}: {}/{}”。格式(用户名、密码、服务器、端口、dbname) 引擎=create_engine (cmd_connect)python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件