Python脚本打包成可独立运行的应用程序
1.打包单个脚本程序
参考:https://blog.csdn.net/snsb_csdn/article/details/122804590
1.1 安装pyinstaller
(1)进入python安装路径下的Scripts文件夹下,打开cmd窗口,输入命令:
python -m pip install pyinstaller
(2)安装完成后,该路径下可以查看到新增有pyinstaller.exe:
1.2 打包成应用程序
(1) 在上述的cmd窗口,继续执行命令:
pyinstaller -F -w 打包.py绝对地址
pyinstaller -F -w C:/Users/Crystal/PycharmProjects/pythonProject1/Assistant.py
(2) 若需指定ico,则执行命令如下:
pyinstaller -F -w -i ico地址文件 打包.py地址
pyinstaller -F -w -i C:\Crystal\Python\Python37\Scripts\dist\favicon.ico C:/Users/Crystal/PycharmProjects/pythonProject1/Assistant.py
(3)查看打包好的应用程序
上一步执行后,会自动创建dist文件夹,打包的程序存放在该文件夹下:
(4) 双击exe文件可直接运行:
2.打包多个脚本程序
参考:https://www.cnblogs.com/shiyongge/p/10582552.html
2.1 打包入口主程序.py为spec文件
(1)打开cmd(管理员权限),进入到打包程序存放路径中,输入:
pyi-makespec -F -w -D 主文件
pyi-makespec -F -w -D F:\pythonProject1\CASH_BACK\Q10_CashBack.py
(2)生成spec文件:
(3)打开配置文件进行对应数据配置:
2.2 在主程序中导入文件时,最好使用冻结路径,否则打包程序后,在本机上可以执行,但在其他机器上会报错
2.2.1 增加一个.py文件(主要返回对应的路径)
# -*- coding: utf-8 -*-
import sys
import os
import datetime
def app_path():
"""Returns the base application path."""
if hasattr(sys, 'frozen'):
# Handles PyInstaller
print(datetime.datetime.now(),"打包后的exe目录:",os.path.dirname(sys.executable))
return os.path.dirname(sys.executable) # 使用pyinstaller打包后的exe目录
print(datetime.datetime.now(), "没打包前的py目录:", os.path.dirname(__file__))
return os.path.dirname(__file__) # 没打包前的py目录
2.2.2 在需要导包的程序里用app_path()来导入执行
代码示例:
from _DBconnent.frozen_dir import app_path
path = app_path()
#--------------冻结路径的程序代码(判断路径是否存在)-------------------
if os.path.exists(path + r'\tnsnames.ora'): #检测目录文件是否存在
file = path + r'\tnsnames.ora' # 冻结路径的程序代码
print(datetime.datetime.now(),'导入Oracle目录:',file)
print("日志目录:",path + r'\log.txt')
log = open(path + r'\log.txt', 'a+')
log.writelines(str(datetime.datetime.now()) + " 导入Oracle目录:" + file + '\n')
dsn=open(file,'r')
elif os.path.exists(path + r'\_DBconnent'):
file = path + r'\_DBconnent\tnsnames.ora' # 冻结路径的程序代码
print(datetime.datetime.now(),'导入Oracle目录:', file)
log = open(path + r'\log\log.txt', 'a+')
log.writelines(str(datetime.datetime.now()) + " 导入Oracle目录:" + file + '\n')
dsn = open(file, 'r')
else:
os.makedirs(path)
2.2.3 spec配置文件中,将.py文件一起打包
2.3 spec文件配置好后进行打包
pyinstaller 配置文件(与cmd不在同个目录下使用绝对路径)
pyinstaller Q10_CashBack.spec