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

查看所有Python相关学习笔记

打包后exe文件
打包后的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文件内容


    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 <module>
          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 <module>
          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 <module>
        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目录下面

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容

  • 错误: -----------------------------------------------------...
    _sunnyRain阅读 3,225评论 2 2
  • 新手求助,windows版本的python没有termios这个模块是没有。如果想在windows下跑,得装cyg...
    夏天夏星阅读 2,639评论 0 1
  • Distutils可以用来在Python环境中构建和安装额外的模块。新的模块可以是纯Python的,也可以...
    MiracleJQ阅读 3,063评论 0 1
  • 20天 对面楼下新开了家串串,老公说周末了带孩子去尝尝。 老大以前提到吃就很兴奋,现在对吃毫无兴趣,是一种被我们拉...
    牡丹888阅读 85评论 0 0
  • 偶遇,美妙的声音 如果有一天的空闲,你会怎么安排? 一杯茶,一台笔电,就是阿弋周末的空闲时间。 如果这样的空闲给你...
    自由的色摄社阅读 219评论 0 1