个人原创,转载请注明出处
环境说明:
python32位,版本3.7.3 理论上3.4以上版本可行
直接上代码,通俗易懂
#!/usr/bin/env python3
# _*_ coding: utf-8 _*_
# File : 一键打包exe.py
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
# Date : 2019/6/3
import sys
import os
import shutil
import base64
pypath = sys.executable
print(pypath)
# resp = os.path.relpath(pypath)
# print(resp)
def get_filePath_fileName_fileExt(fileUrl): # 获取文件上级目录,文件名称,文件后缀
filepath, tmpfilename = os.path.split(fileUrl)
shotname, extension = os.path.splitext(tmpfilename)
return filepath, shotname, extension
filepath, shotname, extension = get_filePath_fileName_fileExt(pypath)
scriptpath = filepath + "\\Scripts\\" + "pyinstaller.exe"
print(scriptpath)
class MyError(Exception):
def __init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)
if not os.path.exists(scriptpath):
print("当前环境尚未安装pyinstaller编译环境")
# absp = os.path.abspath('res/PyAudio-0.2.11-cp37-cp37m-win32.whl')
p = os.popen("%s -m pip install pyinstaller" % pypath)
try:
print(p.read()) # 执行cmd并得到返回的字符串
except UnicodeDecodeError:
print("读取返回值失败,大概意思是编码不对,但是已经安装成功了")
except BaseException:
raise MyError("由于未知原因导致安装失败,可能是网络问题或系统权限问题\n程序结束...")
print("环境安装完毕,下面可以开始打包exe文件了")
else:
print("当前已安装编译环境,可以直接编译")
def packageres():
global packdict
packdict = {}
versioninfo = "IyBVVEYtOAojCiMgRm9yIG1vcmUgZGV0YWlscyBhYm91dCBmaXhlZCBmaWxlIGluZm8gJ2ZmaScgc2VlOgojIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczY0Njk5Ny5hc3B4ClZTVmVyc2lvbkluZm8oCiAgZmZpPUZpeGVkRmlsZUluZm8oCiAgICAjIGZpbGV2ZXJzIGFuZCBwcm9kdmVycyBzaG91bGQgYmUgYWx3YXlzIGEgdHVwbGUgd2l0aCBmb3VyIGl0ZW1zOiAoMSwgMiwgMywgNCkKICAgICMgU2V0IG5vdCBuZWVkZWQgaXRlbXMgdG8gemVybyAwLgogICAgZmlsZXZlcnM9KDEsIDAsIDAsIDApLAogICAgcHJvZHZlcnM9KDEsIDAsIDAsIDApLAogICAgIyBDb250YWlucyBhIGJpdG1hc2sgdGhhdCBzcGVjaWZpZXMgdGhlIHZhbGlkIGJpdHMgJ2ZsYWdzJ3IKICAgIG1hc2s9MHgwLAogICAgIyBDb250YWlucyBhIGJpdG1hc2sgdGhhdCBzcGVjaWZpZXMgdGhlIEJvb2xlYW4gYXR0cmlidXRlcyBvZiB0aGUgZmlsZS4KICAgIGZsYWdzPTB4MCwKICAgICMgVGhlIG9wZXJhdGluZyBzeXN0ZW0gZm9yIHdoaWNoIHRoaXMgZmlsZSB3YXMgZGVzaWduZWQuCiAgICAjIDB4NCAtIE5UIGFuZCB0aGVyZSBpcyBubyBuZWVkIHRvIGNoYW5nZSBpdC4KICAgIE9TPTB4NCwKICAgICMgVGhlIGdlbmVyYWwgdHlwZSBvZiBmaWxlLgogICAgIyAweDEgLSB0aGUgZmlsZSBpcyBhbiBhcHBsaWNhdGlvbi4KICAgIGZpbGVUeXBlPTB4MSwKICAgICMgVGhlIGZ1bmN0aW9uIG9mIHRoZSBmaWxlLgogICAgIyAweDAgLSB0aGUgZnVuY3Rpb24gaXMgbm90IGRlZmluZWQgZm9yIHRoaXMgZmlsZVR5cGUKICAgIHN1YnR5cGU9MHgwLAogICAgIyBDcmVhdGlvbiBkYXRlIGFuZCB0aW1lIHN0YW1wLgogICAgZGF0ZT0oMCwgMCkKICAgICksCiAga2lkcz1bCiAgICBTdHJpbmdGaWxlSW5mbygKICAgICAgWwogICAgICBTdHJpbmdUYWJsZSgKICAgICAgICB1JzA4MDQwNEIwJywKICAgICAgICBbU3RyaW5nU3RydWN0KHUnRmlsZVZlcnNpb24nLCB1JzEuMC4wLjAnKSwKICAgICAgICBTdHJpbmdTdHJ1Y3QodSdGaWxlRGVzY3JpcHRpb24nLCB1J+mBk+mVv+WfuuS6jnB5aW5zdGFsbGVy5omT5YyF55qE6L2v5Lu244CC5pys6L2v5Lu25YWo6YOo5Luj56CB55SxcHkz5p6E5oiQJyksCiAgICAgICAgU3RyaW5nU3RydWN0KHUnUHJvZHVjdE5hbWUnLCB1J2Rhc2hlbk1RJyksCiAgICAgICAgU3RyaW5nU3RydWN0KHUnUHJvZHVjdFZlcnNpb24nLCB1JzEuMC4wLjAnKSwKICAgICAgICBTdHJpbmdTdHJ1Y3QodSdDb21wYW55TmFtZScsIHUn6YGT6ZW/X+i+vuelnuS6kuiBlOenkeaKgOaciemZkOWFrOWPuCcpLAogICAgICAgIFN0cmluZ1N0cnVjdCh1J0xlZ2FsQ29weXJpZ2h0JywgdSfpgZPplb9f6L6+56We5LqS6IGU54mI5p2D5omA5pyJJyksCiAgICAgICAgU3RyaW5nU3RydWN0KHUnQ29tbWVudHMnLCB1J+acrOeoi+W6j+eUqOS6jm1xdHTkupLogZTnvZHnm5HmjqfvvIzlrprml7bmtojmga/mjqjpgIHvvIzmlofku7bkvKDovpPnrYknKV0pCiAgICAgIF0pLCAKICAgIFZhckZpbGVJbmZvKFtWYXJTdHJ1Y3QodSdUcmFuc2xhdGlvbicsIFsyMDUyLCAxMjAwXSldKQogIF0KKQo="
img = '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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAP///wAAAAD///8AAP///wAAAAD///8AAP///wAAAAD///8AAP///wAAAAD///8AAP///wAAAAD///8AAP///wAAAAD///8AAP///wAAAAD///8AAP///wAAAAD///8AAP///wAAAAD///8AAP///wAAAAD///8AAP///wAAAAD///8AAP///wAAAAD///8AAP///wAAAAD///8AAP///wAAAAD///8AAP///wAAAAD///8AAP///wAAAAAoAAAAQAAAAIAAAAABACAAAAAAAAAAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAABAAAAAQAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAABgAAAAwAAAAUAAAAGgAAAB8AAAAnAAAALgAAADQAAAA3AAAAMgAAACgAAAAeAAAAFwAAAA4AAAAIAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAKAAAADsAAABOAAAAYAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABISEgATExMAFBQUABQUFAAVFRUAFhYWABcXFwAYGBgAGBgYABcXFwAXFxcAFhYWABUVFQATExMAERERAA8PDwAPDw8ADQ0NAAsLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//'
packdict["version.txt"] = versioninfo
packdict["logo.ico"] = img
if not os.path.exists("res"):
os.mkdir("res")
for key in packdict:
f_path = "res/%s" % key
f_path = os.path.abspath(f_path)
print("资源绝对路径:%s" % f_path)
if not os.path.exists("res/%s" % key):
tmp = open("res/%s" % key, "wb+")
tmp.write(base64.b64decode(packdict[key]))
tmp.close()
print("成功导出:%s" % key)
def package(
input,
appname="myapp",
output="exes/",
console=True,
icon=None,
version=None):
print("打包器所在路径:%s" % scriptpath)
absp = os.path.abspath('exes/')
print("打包文件输出路径:%s" % absp)
absinput = os.path.abspath(input)
print("待打包文件路径:%s" % absinput)
copyfile = absp + "/%s.py" % appname
print(copyfile)
filepath, shotname, extension = get_filePath_fileName_fileExt(absinput)
supfile = filepath + "\\" + shotname + "_support.py"
print(supfile)
if not os.path.exists(input):
raise MyError("待打包文件不存在,请检查路径是否正确!")
if not os.path.exists(absp):
print("打包生成目录不存在,正在自动创建")
os.mkdir(absp)
shutil.copy(absinput, copyfile)
if os.path.exists(supfile):
copyfile_spt = absp + "/%s_support.py" % appname
shutil.copy(supfile, copyfile_spt)
packcmd = ""
if console and icon is None and version is None:
ver_path = "res/%s" % "version.txt"
ver_path = os.path.abspath(ver_path)
icon_path = "res/%s" % "logo.ico"
icon_path = os.path.abspath(icon_path)
packcmd = "%s --version-file=%s -i %s -F %s" % (
scriptpath, ver_path, icon_path, copyfile)
elif console == False and icon == None and version == None:
ver_path = "res/%s" % "version.txt"
ver_path = os.path.abspath(ver_path)
icon_path = "res/%s" % "logo.ico"
icon_path = os.path.abspath(icon_path)
packcmd = "%s --version-file=%s -i %s -w -F %s" % (
scriptpath, ver_path, icon_path, copyfile)
elif console == False and icon != None and version != None:
ver_path = "res/%s" % version
ver_path = os.path.abspath(ver_path)
icon_path = "res/%s" % icon
icon_path = os.path.abspath(icon_path)
packcmd = "%s --version-file=%s -i %s -F %s" % (
scriptpath, ver_path, icon_path, copyfile)
try:
p = os.popen(packcmd)
except UnicodeDecodeError:
print("格式编码有问题,输入的待打包文件或其依赖文件有中文导致打包失败!")
try:
print(p.read()) # 执行cmd并得到返回的字符串
except UnicodeDecodeError:
print("读取返回值失败,大概意思是编码不对,但是已经打包执行完毕了")
if __name__ == '__main__':
packageres()
package("dashenMQ.py", "dashenMQTT", console=False)