使用pyInstaller发布PathMerge的exe版本(py转换成exe)
2016-05-19 16:51
393 查看
前言
PathMerge是用python写的一个辅助文件夹合并的小工具,它的特点是不用担心合并后文件会丢失,旧文件会创建副本保存下来,除非你手动删除。详情见:python开发目录合并小工具 PathMerge
由于PathMerge使用python写的,运行需要有python的环境,如果想把它转换成exe可执行文件怎么办呢?
我们可以用pyInstaller来将py文件转换成exe文件。
pyInstaller相对另一款py转exe的工具py2exe的优点在于,转换之后的exe文件无需任何支持文件,即使在没有python环境的机器上也能运行。
而py2exe转换成的exe文件需要库文件的支持,也就是说你需要把exe文件和一大堆库文件拷到一个目录下才能运行,使用起来不太方便。
使用pyInstaller唯一的缺点是转换出来的exe文件只能在英文目录下运行,中文目录下会报错。
很遗憾没有找到一款支持中文的转换工具。
pyInstaller使用
使用pyInstaller转换py文件其实很简单,在windows命令提示符中执行一条命令即可python [PyInstaller Path] --console --onefile [PythonFile]
[PyInstaller Path] 为 pyinstaller.py 安装器的目录位置
[PythonFile] 为待转换py文件的名称
安装环境
1、PyInstaller-3.1.1.zip下载地址:http://www.pyinstaller.org/
最新版本可能已经更新
2、pywin32-220.win32-py2.7.exe
下载地址:https://sourceforge.net/projects/pywin32/files/pywin32/Build%20220/
访问windows系统API的库
3、python2.7.11
下载地址:https://www.python.org/downloads/release/python-2711/
默认安装
效果演示
先说明一下运行目录。运行环境所需文件都已放在InstallPackage中
其中pyInstaller已经解压到当前文件夹,pywin32也已经安装好。
下面演示一下如何将PathMerge打包成exe文件。
我已经提前写好了转换脚本——py2exe.py,代码见下节。
三种运行方式:
1、双击运行py2exe,输入待转换文件名称
运行
2、将待转换文件拖到py2exe.py文件上,松手,直接运行
运行结果和上一种方式基本一样。
3、命令行调用。
运行结果和第一种方式一样,这种方式可用来写脚本。
脚本运行之后会在当前目录下生成一个与待转换文件同名的exe文件,见下图
exe文件运行效果和python程序是一样的。
代码
转换脚本在这里~ 作抛砖引玉用。# coding=gbk # py2exe # 作者:freecode # 创建时间:2016/5/11 10:54 # 作用: # 将python脚本转换成windows下exe可执行文件 # 执行条件: # 1、pyInstall已安装,安装目录在.\InstallPackage目录下 # 2、pywin32-220.win32-py2.7.exe已安装 # 3、所在目录必须为中文 # import os import shutil import sys class Py2Exe: def py2exe(self,argv=None): if argv==None: FileName = raw_input('请输入待转换py文件名称(必须在当前目录下):').strip() else: FileName = argv[1].strip() if FileName[0]=='\"' or FileName[0]=='\'': # 去除引号 FileName = FileName[1:-1] FileName = FileName.split('\\')[-1] # 截取文件名 # 生成exe文件 CurrentPath = os.getcwd() PyInstaller = sys.path[0]+"\\InstallPackage\\PyInstaller-3.1.1\\pyinstaller.py" # 安装器位置 PyFile_1 = sys.path[0]+'\\'+FileName # 转换文件 SpecFile = CurrentPath+'\\'+FileName[:-3]+'.spec' # 要删除的spec文件 ExeFile_1 = "%s.exe"%(FileName[:-3]) # 生成的exe文件名 ExePath_1 = "%s\\dist\\%s"%(CurrentPath,ExeFile_1) # exe文件所在目录 CopyPath_1 = "%s\\%s"%(CurrentPath,ExeFile_1) # exe文件复制目录 if os.path.exists(sys.path[0]+'\\'+ExeFile_1): print "%s已存在,不需要转换"%(ExeFile_1) return False else: # 转换开始 os.system('python "%s" --console --onefile "%s"'%(PyInstaller,PyFile_1)) # 移动exe文件,删除多余文件 if os.path.exists(ExePath_1): print 'exe生成完毕' print '复制文件%s到%s……' % (ExePath_1,CopyPath_1) shutil.copy(ExePath_1,CopyPath_1) if argv != None: print '复制文件%s到%s……' % (CopyPath_1,sys.path[0]+'\\'+ExeFile_1) shutil.move(CopyPath_1,sys.path[0]+'\\'+ExeFile_1) else: print 'exe生成失败' print '文件%s不存在'%(ExePath_1) return False if os.path.exists(CurrentPath+"\\dist"): print '删除目录%s……' % (CurrentPath+"\\dist") shutil.rmtree(CurrentPath+"\\dist") else: print '目录%s不存在'%(CurrentPath+"\\dist") return False if os.path.exists(CurrentPath+"\\build"): print '删除目录%s……' % (CurrentPath+"\\build") shutil.rmtree(CurrentPath+"\\build") else: print '目录%s不存在'%(CurrentPath+"\\build") return False if os.path.exists(SpecFile): print '删除文件%s……' % (SpecFile) os.remove(SpecFile) else: print '文件%s不存在'%(SpecFile) return False return True if __name__=='__main__': # 判断是否是在直接运行该.py文件 if len(sys.argv)==1: Py2Exe().py2exe() elif len(sys.argv)==2: Py2Exe().py2exe(sys.argv) else: print 'ERROR:参数错误!\n' raw_input('\n请按回车键(Enter)退出……')
注意
Sorry,目前仅支持windows环境……原创声明
Freecode# : www.cnblogs.com/yym2013相关文章推荐
- HDU3926 Hand in Hand(并查集)
- Leetcode 169. Majority Element
- [Android设计模式]Android退出应用程序终极方法
- 分类算法
- opencv相关
- Android中使用HTTP服务
- [从头学数学] 第213节 带着计算机去高考(五)
- 资料
- 从linux拷贝到HDFS分区表报错,查看是编码问题
- 75. Trapping Rain Water
- ElasticSearch(七)-结构化查询
- linux下vim插件tagbar的安装
- CentOS-6.3安装配置Tomcat-7
- linux 程序动态调用.so文件中的函数
- 职业生涯那些坎!你都过去了吗?
- 职场面试:如何快速提升你的通过率?
- 如何获取浏览器URL中查询字符串的参数?
- leetcode-Remove Linked List Elements
- 打印route表
- hibernate中的session.flush()和commit()的区别