打包 # 安装pip install pyinstaller 1.exe打包 支持,win/mac win 平台上只能打windows的包; mac 上只能打出 mac 的程序; 一般打包的时候结合 虚拟环境 进行打包; 项目开发步骤 创建虚拟环境 开
# 安装
pip install pyinstaller
1.exe打包
-
支持,win/mac
- win 平台上只能打windows的包;
- mac 上只能打出 mac 的程序;
-
一般打包的时候结合虚拟环境进行打包;
-
项目开发步骤
-
创建虚拟环境
-
开发 。。。
-
# 开发完毕 pip freeze > requirements.txt
-
如果是其他平台的需求,安装虚拟机(mac),导入依赖包
pip install -r requirements.txt
-
打包
Pyinstaller -F xxxx
-
产出 demo.exe;
-
注意:如果不需要跨平台,可以直接进行打包;
-
-
命令总览
说明:多文件打包指的是生成多个文件;
# 命令
pyinstaller -D app.py
3.单文件打包
说明:单文件打包指的是生成单个文件;
# 命令
pyinstaller -F app.py
dist目录下仅一个文件,为app.exe
;
使用多文件进行打包,并使用- n
指定名称;
import time
text=input("请输入>>>")
print(text)
with open('account.txt','r',encoding='utf8')as fp:
data=fp.read()
print(data)
使用改方法的时候,执行的时候会报错,因此我们需要使用os模块进行抽取,也可以实现代码的解耦,实现开闭原则。
BASE_DIR=os.path.dirname(os.path.abspath(__file__))
# v=os.path.abspath(__file__) # 获取脚本文件所在的物理路径 >>> E:\newpythoncode\bilibili\app.py
print(BASE_DIR) # E:\newpythoncode\bilibili
# dirname:去掉文件名,返回上级目录
修改原来的程序
备注:当程序出现错误的时候会直接进行终止程序,强行退出;
import time
import os
BASE_DIR=os.path.dirname(os.path.abspath(__file__))
text=input("请输入>>>")
print(text)
# 使用os.path.join()进行拼接。
with open(os.path.join(BASE_DIR,'account.txt'),'r',encoding='utf8')as fp:
data=fp.read()
print(data)
多文件打包时一般不报错。
单文件打包时会报错,因为单文件打包的文件执行的时候会将程序进行解压。随后会在解压的(运行时的临时目录)文件中进行寻找;
import sys
print(sys.argv)
>>> ['E:/newpythoncode/bilibili/test.py']
# sys.argv[0] 'E:/newpythoncode/bilibili/test.py'
输出 python 解释器后的目录,打包后表示 exe 文件的所在文件;
import sys
import os
print(sys.argv[0])
# realpath() 找到当前路径的绝对路径
print(os.path.realpath(sys.path[0]))
补充:
使用上述过程依旧报错,可能是由于版本等问题,此时可以在配置文件中进行修改,然后重新打包;
点击查看 : 参考文章
datas=[
('account.txt','.')# 文件名,后面猜测是相对的路径;
]
# 执行命令
pyinstaller -D 哈哈哈.spec
# >>> 生成目录中会直接包含文件
运行成功
5.导入自定义包导包一般有两种情况 : 普通导包和动态导入
5.1 默认导入说明:在导包的时候不管是直接导入的,还是间接(导入包中的导入)都会直接进行导入;不会出现异常;
5.2 动态导入import importlib
# from utils.db import get_db
from utils.encrypted import md5
print("------开始执行--------")
pk=importlib.import_module("utils.db")
res=pk.get_db()
print(res)
data=md5()
print(data)
input("按回车键退出>>>")
说明:此导入包的方式一般会结合这反射进行使用,从而使得 python 的配置文件更好的遵循开闭原则,从而降低代码之间的耦合度。
此时会报错,因为动态导入的时候就需要识别程序,所以我们可以在配置文件哈哈哈.spec
中进行手动添加。
# 执行命令
pyinstaller -D 哈哈哈.spec # 自己需要指定配置文件;
配置后正常运行。
6.补充-
生成图标
# 需要 img.ico 文件 # 指定文件的路径即可 pyinstall -i img.ico -n name -w -D main.py
其他的功能的添加可以参考命令中的提示!
-
说明
打包,最常用于是打包桌面程序(pyqt5),控制台程序一般很少使用;
控制台一般用于某些脚本的执行,例如,爬虫脚本,直接交给用户运行即可;
大江东去,浪淘尽,千古风流人物。