pyinstaller快速入门使用
1.pyinstaller是什么?
简单理解就是可以将python程序打包成可执行的文件(exe文件)
打包好后的可执行文件能够在多种平台上面运行,如windows,linux,macos
2.安装
pip install pyinstaller
3.使用建议
建议使用python3.6/3.8
建议创建独立的虚拟环境,一个环境用一个项目,可以使用anaconda单独创建环境
若想要将虚拟环境里的第三方包导出到一个文件里,可以使用 pip free > reqirements.txt
在python程序中,导入第三方包时建议使用from xx import xx,可以解决模块导入报错问题
项目需要的文件,最好都放在项目目录里,不要放在本地上,可以防止打包时,文件读取时找不到文件路径的问题
4.开发流程使用过程
目的
如果在mac上开发,想要在windows上打包
过程
-
在mac上创建专门的虚拟环境为该项目做准备
-
在mac上开发该项目
-
在mac上开发完毕后,使用pip freeze > reqirements.txt将环境中所需要的第三方包,都放入这个文件里
-
在windos上面创建一个该项目的虚拟环境
-
在windows上面安装该项目的第三方依赖包pip install -r reqirements.txt
-
在windos虚拟环境中安装pyinstaller
-
在windows上面使用pyinstaller打包
5.打包成dist多文件
多文件的含义就是打完包以后dist文件中会出现了很多个文件,优点是运行速度会快一点
命令
pyinstaller -D -w 文件名.py(启动文件)
加入-w参数,可以提前检查问题
打包成功后的文件讲解
文件 | dist文件 | build文件 | 名.spec文件 |
---|---|---|---|
描述 | 我们打完包后的结果,exe文件就在该文件中,如果想要发送给朋友只需要将dist整个文件发送给朋友即可,不要只发送exe文件 | 其实是中间编译过程中,产生的中间代码,其实没啥用 | 其实是打包的过程中,产生的配置文件 |
6.打包成dist单文件
dist里面只有一个exe文件,如果想要发送,只需要打包exe文件即可
命令
pyinstaller -F -w 文件名.py
加入-w参数,可以提前检查问题
7.如何打包时给包设置名字
pyisntaller -F -n 新名字 -F 文件名.py(启动文件)
8.解决本地文件读取路径问题
1.问题描述
我们的项目运行时,肯定不是只有一个可运行文件,我们可能需要读取其他本地的文件,如excel文件等,这个时候就涉及到了路径问题
2.解决办法
使用dist多文件打包方式
多文件导包的前提:读取的本地文件,需要提前放入项目中
代码
我们光把文件放入项目里,还是不能保证文件读取一定不会出错,因此我们需要在项目代码中,将我们的文件路径再一次确定,也就是把文件路径写死,无论到哪里都不会改变
在项目代码中添加代码,这是只是一个举例
import os
import sys
##获取当前项目目录,如“users/test",test是项目名,并设置成全局变量BASE_DIR
BASE_DIR = os.path.dirname(os.path.realpath(sys.argv[0]))
##读取配置文件
df=pd.read-csv(os.path.join(BASE_DIR,"文件名.csv")) #不用加r
为什么不能打包成单文件
打包成单文件会发生错误,不建议使用,即使打包成了一个文件,但是仍然会出现问题,因为我们虽然打包成了一个文件,但是我们在运行时仍然会对其进行拆分的,此时拆分出来的路径会发生变化,我们拆分的过程是在临时目录中进行的,所以会出现报错现象
3.注意:
打包时在入口文件打包,如果入口文件打包了,其他的文件也会被打包进去
下面是对当前编写的文件获取路径的方法
这种方法可以在平常使用时获取我们项目里本地文件的绝对路劲
import os
##获取当前编写文件的目录,如“/users/test/a.py”
os.path.abspath(__file__)
#获取项目当前项目的路径
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
##读取配置文件
df=pd.read-csv(os.path.join(BASE_DIR,"文件名.csv")) #不用加r
9.使用
对一个项目进行打包时,我们只需要打包它的入口文件即可,因为我们在打包入口文件时,入口文件里的其他内容会被自动导入进来
1.进入项目文件
这一步跳过