一、安装准备

1、看Esky文档,他支持的是cxfreeze4,而在pypi找到cxfreeze4最多只支持到python3.4版本,我用习惯的是3.6,所以干脆就用经典的2.7版本来开发了。附上esky的github链接:https://github.com/cloudmatrix/esky/

2、pip install esky即可安装Esky,对应的cxfreeze的whl下载路径:https://pypi.org/project/cx_Freeze/4.3.4/#files,然后直接pip install  cx_Freeze-4.3.3-cp27-none-win32.whl即可,whl根据你的python版本和电脑位数选择下载即可。安装后进到python目录下面的Scripts文件夹,找到cxfreeze-postinstall文件,python  cxfreeze-postinstall运行一下,最后在cmd测试 cxfreeze -h 成功即证明安装成功,cxfreeze --version可以查看版本。

二、开发阶段

1、直接用wx_python做一个简易界面,也是参考了http://www.blog.pythonlibrary.org/2013/07/12/wxpython-updating-your-application-with-esky/ 里面的用法,代码如下(之前做的一个东西删减后的代码,可以运行):

#coding=utf-8
import os,random,sys
import wx,ctypesfrom wx.lib.softwareupdate import SoftwareUpdate #wx_python内置了esky
from multiprocessing import Process,Valuefrom version import VERSION  #存放版本号class OrderCtrl(wx.App, SoftwareUpdate):"""The Main Class"""#----------------------------------------------------------------------def __init__(self, redirect=False, filename=None):wx.App.__init__(self, redirect, filename)BASEURL = "http://10.5.9.222:8080/cw"  #新版本存放地方self.InitUpdates(BASEURL, BASEURL + "/" + 'ChangeLog.txt') #升级说明文件ChangeLog测试后写不进更新记录,暂时也找不到解决方法,但是写了这个参数就带上这个文件self.SetAppDisplayName('easyOrder') self.CheckForUpdate(silentUnlessUpdate=True)#监测到新版本就更新,不然不展示更新self.frame = wx.Frame(None, -1,title='easyOrder'+VERSION,style=wx.SYSTEM_MENU|wx.CAPTION|wx.CLOSE_BOX|wx.MINIMIZE_BOX)self.frame.SetMinSize((600, 600))self.frame.SetMaxSize((600, 600))self.panel = wx.Panel(self.frame)self.icon = wx.Icon('show.ico', wx.BITMAP_TYPE_ICO)self.frame.SetIcon(self.icon)  self.createWidgets()self.frame.Show()#----------------------------------------------------------------------def createWidgets(self):ticketLbl = wx.StaticText(self.panel, label='专票流水号码',pos=(60,33),size=(60,-1))#pos=(300,200) 控件位置self.number1 = wx.TextCtrl(self.panel, pos=(130,30),size=(80,-1),style=(wx.TE_READONLY))numberLbl = wx.StaticText(self.panel, label='普票流水号码',pos=(270,33),size=(60,-1))self.number2 = wx.TextCtrl(self.panel, pos=(340,30),size=(80,-1),style=(wx.TE_READONLY))#根据导出的附件一,进行一多分离excelLbl = wx.StaticText(self.panel, label='TAXMS系统数据',pos=(30,85),size=(90,-1))self.excelPath1 = wx.TextCtrl(self.panel, pos=(130,80),size=(300,32))self.excelBtn1 = wx.Button(self.panel, label='导入',pos=(450,78),size=(50,-1))#反导入前的数据excelLbl = wx.StaticText(self.panel, label='开票系统数据',pos=(30,135),size=(90,-1))self.excelPath2 = wx.TextCtrl(self.panel, pos=(130,130),size=(300,32))self.excelBtn2 = wx.Button(self.panel, label='导入',pos=(450,128),size=(50,-1))#生成模板让导入开票系统excelLbl1 = wx.StaticText(self.panel, label='大发数据',pos=(30,185),size=(90,-1))self.excelPath3 = wx.TextCtrl(self.panel, pos=(130,180),size=(300,32))self.excelBtn3 = wx.Button(self.panel, label='导入',pos=(450,178),size=(50,-1))#输入框和匹配框+语音提醒########## 多行文本框 ##########inputLbl = wx.StaticText(self.panel, label='输入框',pos=(30,340),size=(90,-1))# self.area_text = wx.TextCtrl(self.panel, -1, '', pos=(30,270),size=(200, 40),style=wx.TE_PROCESS_ENTER)self.area_text = wx.TextCtrl(self.panel, -1, '', (30, 370), (200, 40), wx.TE_MULTILINE)self.area_text.SetInsertionPoint(0)#只读显示运单号和发票号showLbl1 = wx.StaticText(self.panel, label='运单号',pos=(30,420),size=(90,-1))self.show_text1 = wx.TextCtrl(self.panel, -1, '', pos=(30,440),size=(200, 40),style=(wx.TE_READONLY))self.show_text1.SetInsertionPoint(0)showLbl2 = wx.StaticText(self.panel, label='发票号',pos=(270,340),size=(90,-1))self.show_text2 = wx.TextCtrl(self.panel, -1, pos=(270,370),size=(200, 110),style=(wx.TE_MULTILINE|wx.TE_READONLY|wx.HSCROLL))self.show_text2.SetInsertionPoint(0)self.startBtn = wx.Button(self.panel, label='启动匹配功能',pos=(250,500),size=(80,-1))#size=(400,40) 控件宽高,-1为默认self.mainSizer = wx.BoxSizer(wx.VERTICAL)#垂直方向self.mainSizer.Fit(self.frame)self.panel.Layout()def OnExit(self):#wx.App类方法return 0if __name__ == '__main__':app = OrderCtrl()app.MainLoop()

2、撰写setup.py,通过此文件进行打包参数的控制,如下:

#coding=utf-8
from esky import bdist_esky
from setuptools import setup
from version import VERSION# Common settings
# python -m SimpleHTTPServer
exeICON = 'show.ico' #打包成exe的图标
NAME = "easyOrder" #打包后显示的文件名
FREEZER ='cx_Freeze'# "includes": [""]    #引用额外的包
FREEZER_OPTIONS = {"excludes": ["tkinter"],"includes" : ["pyttsx3.drivers.sapi5","win32com.server.util"],"packages": ["wx"]
};APP = [bdist_esky.Executable("test_esky.py", #出文件入口gui_only=True,#不显示cmd窗口icon=exeICON, )]#show.icon、config.txt:打包后保留的文件
DATA_FILES = [('',['show.ico','config.txt'] )]ESKY_OPTIONS = dict( freezer_module     = FREEZER,freezer_options    = FREEZER_OPTIONS,enable_appdata_dir = False,bundle_msvcrt      = False,)    # Build the app and the esky bundle
setup(   name       = NAME,version    = VERSION,scripts    = APP,       data_files = DATA_FILES,options    = dict(bdist_esky=ESKY_OPTIONS),)

三、打包,直接用命令行,在同级路径下:python setup.py bdist_esky 即可打包。打包成功后如下:

包里面的内容:

四、更新

修改新版本后,在version.py里面把VERSION参数更新一下,例如把0.1.8.2更新到0.1.8.3,重新 python setup.py bdist_esky 打包,然后把新版本放在BASEURL下面(前提是你的url可以通过http访问),在里面新建ChangeLog.txt文件,这时候,你重新打开旧版本就可以检测到更新了(ps:打包的NAME = "easyOrder" 这个参数前面更新要一致?不然检测不到版本)

Esky+Cx_freeze开发打包python可自动升级程序相关推荐

  1. 自动升级程序的实现方案(delphi版)

    功能描述: 在进行cs系统开发时,当系统进行升级时,必不可少需要进行软件的升级,常用的方式是: 1,把开发好的升级包或dll打包上传至升级服务器,更新服务器的版本号,这里最好是有个系统来维护这个更新, ...

  2. Android开发详解之App升级程序一点通

    Android开发详解之App升级程序一点通 结束语 UpdateManager.java import java.io.File; import java.io.FileOutputStream; ...

  3. Winform 自动升级程序

    抽时间整理下升级这块的功能,并封装一个升级工具包. 作为winform 程序员都有一个C/S端程序绕不过的问题.那就是如何升级程序? 程序升级两种1.启动时强制更新 2.自动.手动获取更新,并确认是否 ...

  4. 基于TCP网络通信的自动升级程序源码分析-客户端接收文件

    升级程序客户端接收文件 /// <summary>/// 文件数据缓存 索引是 ConnectionInfo对象 数据包的顺序号 值是数据/// </summary>Dicti ...

  5. WPF开发一款软件自动升级组件

    前几天介绍了WPF进行自定义窗口的开发,关注的朋友还挺多,超出本人意料,呵呵,那么我就再接再励,在上篇的基础上,讲述一下软件自动升级组件的开发原理,大家时间宝贵,不想搞太长的篇幅,所以尽可能拣重要的说 ...

  6. Python脚本生成的exe文件自动升级程序实现方法

    最近同事使用python写了一个在公司内部使用的 C/S 架构的软件,主要功能在服务端完成.通过pyinstaller 生成 exe的客户端,希望能够给客户端增加版本校验自动升级功能 在这里记录下实现 ...

  7. python股票自动交易从零开始-python程序化交易编程-python制作自动交易程序!

    如何用python进行期货程序化交易 .程序化交易系统目前主要是通过计算机程序实现的,其实就是把交易者决策的过程用计算机语言描述出来,然后由计算机给出交易建议或直接发送交易指令到期货公司的. SDYG ...

  8. 预警系统一键自动升级程序v2.5.2_一汽大众全新高尔夫上市 售价12.9816.58万

    [太平洋汽车网新车频道]11月7日,一汽-大众全新数字高尔夫(MK8)在佛灵湖车迷大会上上市,共四款配置车型, 售价12.98-16.58万 .新车为全球首款基于MQBEvo平台打造的大众车,采用全新 ...

  9. python开发微信小程序-微信小程序开发:python+sanic 实现小程序登录注册

    开发微信小程序时,接入小程序的授权登录可以快速实现用户注册登录的步骤,是快速建立用户体系的重要一步.这篇文章将介绍 python + sanic + 微信小程序实现用户快速注册登录全栈方案. 微信小程 ...

最新文章

  1. b区计算机考研招不满的大学,B区又一所院校招收大量调剂!一志愿不满!
  2. SysTick定时器的一个简单应用
  3. java分布式api网管关,分布式04-Spring Cloud Zuul Api网关 一
  4. 卫生统计学v是什么意思_四川大学华西公共卫生学院报考常见问题答疑
  5. python3安装常见问题_有关在 Windows 上使用 Python 的常见问题解答
  6. FPGA资源评估方法
  7. 机器学习——seaborn可视化
  8. LoRa开发|LoRa模组AT指令开发
  9. python爬虫案例——爬取豆瓣图书信息并保存
  10. RTL8761ATV-CG蓝牙芯片4.0模块Realtek蓝牙驱动
  11. 物业公众号推文范例_《爱物业》物业服务公众号平台
  12. php实战搭建博客,利用laravel搭建一个迷你博客实战教程
  13. malloc,calloc区别
  14. iOS 之模拟网易新闻主页的滚动效果
  15. 2021年度济南职工医保门统定点医疗机构名单
  16. 银行卡号每输四位加空格,及银行卡的识别(此银行卡号是那个银行)
  17. linux命令行下写for语句,Linux命令行 – 流程控制:for 循环
  18. 73 [backtrader期货策略]十大经典策略-菲阿里四价(逻辑优化版)
  19. 自定义view-滑动刻度尺计算金额
  20. 松下伺服器A4调试软件 适用于A,A3,A4,B,E,S系列

热门文章

  1. 现代服务器底层奠基(SEDA+Reactor/Proactor+epoll/kqueue )
  2. ResNet详细介绍
  3. vue项目中使用Echarts 动态更改图表数据 , Vue 折线图、柱状图等图表动态刷新 ,
  4. Google Earth Engine(GEE)—— GEDI L2A Raster数据中轨道数量orbit_number暂时无法获取
  5. 独立同分布(I.I.D.)是什么?(转载)
  6. 1256 字符串复制
  7. 小程序实现轮播图跳转页面和小程序
  8. 知识图谱常用评价指标:MRR,MR,HITS@K,Recall@K,Precision@K
  9. ASP.NET Core开发-后台任务利器Hangfire使用
  10. 解决注册表无法删除问题