打包python程序为电脑上可运行的程序(Pyinstaller or py2app )

查看所有Python相关学习笔记

打包python程序为电脑上可运行的程序(Pyinstaller or py2app )_第1张图片
打包后exe文件
打包python程序为电脑上可运行的程序(Pyinstaller or py2app )_第2张图片
打包后的exe程序界面(此界面需自行在代码中组织)

win版

一、库文件安装

安装相关库:

pip install PyInstaller

二、打包命令

  • 直接打包
    pyinstaller [参数] 需要打包的py文件
    
  • 通过spec文件打包(直接打包后会生成spec文件,可修改内部参数后根据spec打包)
    pyinstaller getmessagefromdb.spec
    
  • 直接打包时,各参数含义
参数 含义
-D 默认项,不写-F时,默认就是-D,将文件打包成一个文件夹
-F 表示生成单个可执行文件(单个的exe文件)
-w 表示去掉控制台窗口,这在GUI界面时非常有用。不过如果是命令行程序的话那就把这个选项删除吧!(如果打包错误需要再cmd窗口运行查看报错原因,则打包时需要去掉此参数)
-p 表示你自己自定义需要加载的类路径,一般情况下用不到,(一般导入的库都在系统path路径内,所以不需要单独使用此参数)
-i 表示可执行文件的图标(生成的exe文件对应的图标)
--add-binary xxx 加入二进制文件
  • 直接打包后生成的spec文件内容


    打包python程序为电脑上可运行的程序(Pyinstaller or py2app )_第3张图片
    image.png

三、常见问题

  1. 打包后exe文件太大(超过100M)
    原因分析:说明调用的库太多或者对应环境中相关的库太多,
    解决方案:创建一个虚拟的环境,此环境仅安装必须的库,然后再次环境内打包。(本人使用的anaconda来创建的不同的python环境,建议使用minianaconda来管理python环境)

  2. 打包后运行exe文件提示:failed to execute script
    原因分析:在cmd窗口运行exe文件(打包时不要加-w参数,要不然看不到报错内容),查看具体原因
    解决方案:根据具体原因进行调整

  1. 打包时包含ibm_db库,打包后一直无法正常运行
    • 运行时报错:
      Traceback (most recent call last):
        File "case\getmessagefromdb.py", line 1, in 
          from lib.ConnectDB2 import ConnectDB2 as CDB
        File "d:\anaconda3\envs\py36\lib\site-packages\PyInstaller\loader\pyimod03_imp
      orters.py", line 627, in exec_module
          exec(bytecode, module.__dict__)
        File "lib\ConnectDB2.py", line 4, in 
          import ibm_db,traceback
        File "d:\anaconda3\envs\py36\lib\site-packages\PyInstaller\loader\pyimod03_imp
      orters.py", line 627, in exec_module
          exec(bytecode, module.__dict__)
        File "site-packages\ibm_db.py", line 10, in 
        File "site-packages\ibm_db.py", line 9, in __bootstrap__
        File "imp.py", line 343, in load_dynamic
      ImportError: DLL load failed: 找不到指定的模块。
      [1472] Failed to execute script xxx
      
    • 解决方法:
      1. 增加环境变量:-p xxx
      2. 打包时添加参数:--add-binary xxx
    • 具体命令(其中D:\Anaconda3\envs\py36是我的python安装路径)
      pyinstaller -F -w -p D:\Anaconda3\envs\py36\Lib\site-packages\clidriver\bin --add-binary D:\Anaconda3\envs\py36\Lib\site-packages\ibm_db_dlls\ibm_db.dll;.\ibm_db_dlls  -i sms.ico case/getmessagefromdb.py
      

四、参考链接

参考链接1:Python打包方法——Pyinstaller
参考链接2:PyInstaller打包python脚本的一些心得
参考链接3:用PyInstaller把Python代码打包成单个独立的exe可执行文件

参考链接4:pyinstaller简洁教程
参考链接5:解决pyinstaller打包时包含ibm_db,运行报错问题

mac版

一、库文件安装

安装相关库:

sudo pip install py2app

二、打包命令

  1. 进入工程目录下面:
cd  ProjectDirctory
  1. 生成 setup.py 文件:
py2applet   --make-setup   MyApplication.py

3.清空以前生成的编译文件:

rm -rf build dist

4.生成mac下的应用:

python  setup.py  py2app 

5.生成的应用在dist目录下面

你可能感兴趣的:(打包python程序为电脑上可运行的程序(Pyinstaller or py2app ))