【详细】python打包exe文件,pycharm+pyinstaller打包成功

目录

目标

配置环境

使用pyinstaller

不带有资源的打包方法 

py文件和资源一起打包方法

讨论 

参考


目标

1. 将带有资源文件的py文件一起打包成exe;

2. 且打包后文件尽可能小。

配置环境

如果对生成的exe大小没有限制可以使用anaconda,很多不用的包也会一起打进去,不推荐。使用纯净的python+安装需要的包,打出来得exe会小很多,以这种方法展开。

1.安装python,我使用的是win10+python3.7.0,python下载地址:Python Release Python 3.7.0 | Python.orgThe official home of the Python Programming Languagehttps://www.python.org/downloads/release/python-370/

界面拉到最下方:

 选择标红框的取安装,在安装的时候记得勾选添加path到环境变量,会自动添加环境变量。如果没有勾选但安装完了也不用着急,比如你安装python3.7.0的目录是在D:\pythonHome。右键我的电脑->高级系统设置->高级->环境变量->选择系统变量下面的Path,双击->新建,输入D:\pythonHome,再新建,输入D:\pythonHome\Scripts,就完成了环境变量的设置。

将pycharm的环境设置成刚安装的python环境,参考:pycharm修改python环境_fenghutu的博客-CSDN博客_pycharm修改python环境进入settings配置环境界面如果在找不到python安装目录时,点击5处的按钮,显示隐藏文件夹选中路径后,点击OK就可以了https://blog.csdn.net/fenghutu/article/details/104281609

最好重启一下pycharm,再点开pycharm的terminal,先输入python,查看一下这个python是不是刚安装的python,如果是anaconda的python会有anaconda的信息在提示信息中,这时候就要先屏蔽一下anaconda的环境变量。或者直接在D:\pythonHome目录下按Shift+鼠标右键执行“在此处打开powershell窗口”,在这个地方执行打包命令也是一样的。

在Pycharm界面的最下面,你可以看到Terminal,选择这个选项,这就是一个终端界面。

在这里插入图片描述 

在此界面写输入指令: pip install pyinstaller 对pyinstaller进行下载。

在下载过程中,可能会遇到一些错误提示,解决方案可以参考我的另外几篇博客:
常见错误提示一:
You are using pip version 10.0.1, however version 20.0.2 is available.You should consider upgrading via the ‘python -m pip install --upgrade pip’ command.
常见错误提示二:
NoneType’ object has no attribute 'bytes

然后就是安装一些代码中需要的包了。

使用pyinstaller

不带有资源的打包方法 

在终端里输入的指令为: pyinstaller -w -F XXX.py

但是对于初学者来说,这里要解释的东西很多:
-w:表示希望在生成的.exe程序运行过程中,不要出现cmd黑框(就是图中的黑框)(注意:小写!)

-F:表示希望将所有的程序全部打包在一起,生成的只有一个.exe文件,这样的文件集成度高,但是运行速度慢;如果不写-F,生成的还有一堆.dll文件,这样的程序里文件很多,但是运行速度比较快,这也是我们平时使用的程序的样式(如图)(注意:大写!)

在这里插入图片描述

 XXX.py:指的是你整个项目的入口程序,大家写项目时很可能是多文件编程,你整个项目时靠哪个文件作为入口拉起来的,就填那个文件的名字。

运行pyinstaller -w -F XXX.py指令后,会生成两个文件夹:一个叫build,另一个叫dist。

在这里插入图片描述 

点开dist文件夹,里面会有一个用你填进去的XXX命名的文件夹,再点进去,你就会看到XXX.exe文件。

 在这里插入图片描述

到此,如果除了py文件没有其他资源文件需要一起打包的话 ,理论上你已经生成了.exe可执行文件,这样就完成了。但如果你需要将资源文件一起打包,还需要使用另外一种方法。

py文件和资源一起打包方法

这里使用的是修改生成的.spec文件方法,但查了好多博客都是错的,经过修改后实践证明是可以的。

在你自己的代码中先添加下面的一个函数,就是将带有资源路径的写法转成官方的写法:

#coding:utf-8
import sys
import os

#生成资源文件目录访问路径
def resource_path(relative_path):
    if getattr(sys, 'frozen', False): #是否Bundle Resource
        base_path = sys._MEIPASS
    else:
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)

#访问res文件夹下a.txt的内容
filename = resource_path(os.path.join("res","a.txt"))

fielname就是你需要调取资源的子路径,比如资源的地址是G:\temp\res\ a.txt,filename的路径到res这一级就可以,在之后会在.spec文件中写入根目录。

与不带资源的方法不同处是需要先执行命令生成.spec文件,pyi-makespec -F test.py (如果要添加Icon等可以在这里就使用pyi-makespec --icon abc.jpg -F test.py语句生成spec文件)。在.spec文件pathex中添加根目录,在datas中添加资源。

最后在执行pyinstaller xxx.spec即可,xxx.spec就是刚才修改的文件。 到此打包带有资源的过程就完成了。

常见错误提示一:

ImportError: cannot import name ‘PackagePath‘ from ‘importlib_metadata‘

常见错误提示二: 

Pyinstaller 打包exe 出现PermissionError: [Errno 13] Permission denied: 'C:\\...\xxx.dll

讨论 

如果留言没有及时回复,可以加群讨论:

 

参考

Python如何生成exe文件?用Pycharm一步一步带着你学(超详细、超贴心)_Nire_Yeyu的博客-CSDN博客_python生成exe文件

下载pyinstaller报错:You should consider upgrading via the 'python -m pip install --upgrade pip' command._Nire_Yeyu的博客-CSDN博客

Pycharm报错:'NoneType' object has no attribute 'bytes'_Nire_Yeyu的博客-CSDN博客 

PyInstaller解决 ImportError: cannot import name ‘PackagePath‘ from ‘importlib_metadata‘_小白tree的博客-CSDN博客 Pyinstaller 打包exe 出现PermissionError: [Errno 13] Permission denied: 'C:\\...\xxx.dll_zhf的博客-CSDN博客

Pyinstaller如何将资源文件一起打包至exe中 - darcymei - 博客园 (方法有误)

猜你喜欢

转载自blog.csdn.net/qq_36076233/article/details/122960071