python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件

  

本文介绍一个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表示生成一个可执行文件。

  

 python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件

  

 python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件

  

 python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件

  

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打包的时候,出现了如下错误

  

 python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件

  

解决方法是,编辑文件<代码>/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.py      

sqlalchemy打包问题

  

在用pyinstaller打包一个使用了sqlalchemy库的python3工程中,碰到了打包后的可执行文件报错的问题,如下图所示

  

 python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件

  

解决方案是,将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安装文件