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上打包

过程

  1. 在mac上创建专门的虚拟环境为该项目做准备

  2. 在mac上开发该项目

  3. 在mac上开发完毕后,使用pip freeze > reqirements.txt将环境中所需要的第三方包,都放入这个文件里

  4. 在windos上面创建一个该项目的虚拟环境

  5. 在windows上面安装该项目的第三方依赖包pip install -r reqirements.txt

  6. 在windos虚拟环境中安装pyinstaller

  7. 在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.进入项目文件

这一步跳过

2.输入cmd

3.打包