一、PyInstaller说明

      pyinstaller是一个第三方模块,托管在github上,它是一个把python脚本及其依赖的模块,打包成一个独立的可执行程序,使其能运行在没有安装python环境的机器上。支持Linux/unix /mac 及windows,但注意的是,在什么平台上打包,就会生成对应平台可执行的独立程序,如在windows上打包会生成exe的可执行文件。本文所演示的就是在windows平台使用pyinstaller打包一个简单的exe程序。在linux上同样pyinstaller -F xxx.py  会生成对就的可执行程序。



二、原始脚本内容如下:

1、生成一注双色球代码如下:

def CaiSeQiu(num=1):                  
    num = int(num)
    p = 1
    with open("tmp",'w') as f:
        while p <= num:
            LAN = []
            L = []
            while len(L) <= 5:
                L = LAN.append(random.randrange(1, 34))
                L = sorted(set(LAN))
                BLUE = random.randrange(1, 17)
            print("红球: %s, 蓝球: %s") % (L, BLUE)  

            p += 1
if __name__ == "__main__":
   CaiSeQiu()

执行会生成如下:

红球: [10, 13, 20, 24, 28, 29], 蓝球: 9


三、使用PyInstaller打包成可执行的exe程序

1、环境

python2.7.13 ,为了打包成有图形化的可执行程序需要安装wxpython模块,pip install wxpython

带有图形化的可执行程序 生成双色球.

2、代码如下:

#!/usr/bin/python
# -*- coding=utf-8 -*-
# by author San at 2016-03-03
import random
import sys
import wx

#清除生成的双色球
def onclear(event):
    content.SetValue('')
    
def CaiSeQiu(event,num=1):
    num = int(num)
    p = 1
    with open("tmp",'w') as f:
        while p <= num:
            LAN = []
            L = []
            while len(L) <= 5:
                L = LAN.append(random.randrange(1, 34))
                L = sorted(set(LAN))
                BLUE = random.randrange(1, 17)
            content.SetValue("红球: %s, 蓝球: %s" % (L, BLUE))
            p += 1

app = wx.App()
frame = wx.Frame(None, title="彩色球生成器v1.0", size=(420, 350))
panel = wx.Panel(frame)

sBox = wx.BoxSizer() 
vBox = wx.BoxSizer(wx.VERTICAL) 
 
content = wx.TextCtrl(panel)
btn1 = wx.Button(panel, label="生成")
btn2 = wx.Button(panel, label="清除")

sBox.Add(btn1, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
sBox.Add(btn2, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
vBox.Add(sBox, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
vBox.Add(content, proportion=5, flag=wx.EXPAND | wx.ALL, border=5)
btn1.Bind(wx.EVT_BUTTON, CaiSeQiu)
btn2.Bind(wx.EVT_BUTTON, onclear)

panel.SetSizer(vBox)
frame.Show()
app.MainLoop()

保存为CaiseQiu.pyw  双击执行如图:

wKiom1lnFTGwfRQSAAAmEbRXUUM699.png-wh_50

说明:这个pyw后缀的python脚本需要要安装有python的系统上才能执行,但是没法在没有安装python环境的系统执行,因此需要pyinstaller打包成exe文件


3、pyinstaller打包成caiseqiu.exe

将caiseqiu.pyw放到一个非英文目录(c:\mypythonexe\)下,打开cmd -->cd c:\mypythonexe

如图:

wKiom1lnF5iz4Q02AAAWLucZE4w637.png


执行:pyinstaller -F -w caiseqiu.pyw 此时会出现类似 如下信息

3845 INFO: Building COLLECT out00-COLLECT.toc completed successfully.

表示打包成功;此时目录下有如下信息

 c:\MyPythonexe 的目录

2017/07/13  14:46    <DIR>          .
2017/07/13  14:46    <DIR>          ..
2017/07/13  14:46    <DIR>          build
2017/07/12  18:32             1,264 caiseqiu.pyw
2017/07/13  14:46               873 caiseqiu.spec
2017/07/13  14:46    <DIR>          dist
               2 个文件          2,137 字节
               4 个目录  4,577,239,040 可用字节


在dist目录下就会有一个caiseqiu.exe 如下:

wKiom1lnGSayX5lnAABSzeaH-Cs777.png-wh_50


双击执行如下:

wKiom1lnGTLhEj7vAAAvCBrADBI725.png-wh_50

点生成即生成一柱,清除功能。

到这里我们使用wxpython   PyInstaller模块完成windows平台 可执行exe程序打包。