python整个项目打包成一个exe程序
#已安装python环境
一、安装PyInstaller 模块
pip install pyinstaller
运行上面命令,应该看到如下输出结果:
Successfully installed pyinstaller-x.x.x
其中的 x.x.x 代表 PyInstaller 的版本
pyinstaller打包程序exe踩过的坑
1.提示:TypeError: an integer is required (got type bytes) 解决方法如下:
pip install https://github.com/pyinstaller/pyinstaller/archive/develop.tar.gz
2.然后会出现另外一个异常 AttributeError: module ‘enum’ has no attribute ‘IntFlag’? 解决办法如下:
这可能是由包Enum34引起的。因为Python3.4有一个标准库枚举模块,所以您应该卸载Enum34,因为在Python3.6中添加了Enum.Intflag,所以它不再与标准库中的枚举兼容。
#卸载enum34
pip uninstall enum34
备注:用不了pip的网友,可直接删掉\Lib\site-packages\enum打头的两个文件夹即可!
二、打包python项目
如项目在对应的目录
1.在cmd中进入对应的项目目录路径
2. 修改.PY文件(因为打包成exe文件后,会发送给其他同事使用,路径发生变化)
需要在读取资源文件的地方调整我们的代码,加入下面的代码:
#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)
filepath = resource_path(os.path.join("PATH"))#读取资源文件夹PATH路径
3. 生成.SPEC文件并修改
修改完.py文件后可以先运行一下,保证无误。然后通过cmd指令:
pyi-makespec -F beloved.py
生成.spec文件。如果要添加Icon等可以在这里就使用pyi-makespec --icon abc.jpg -F test.py语句生成spec文件。
接下来,修改.spec文件:
修改前datas=[],本文这里把它改成上图所示,意思是
将test.py当前目录下的PATH目录(及其目录中的文件)加入目标exe中,在运行时放在临时文件的根目录下,名称为PATH。
到这一步便可以把资源文件嵌入到.exe文件了。
4. 生成.EXE文件以及其他相关文件
接下来,我们便可以放心的生成.exe文件了。执行cmd指令:
pyinstaller -F test.spec
等待一段时间.exe文件生成在子文件dict中。到此便可以把.exe发给其他电脑端运行了。.exe运行比较慢,建议多等待,只要没出现错误提示就OK。
可能会出现No module named 'pkg_resources.py2_warn’错误提示,详情参见解决方案。