打包exe的工具:pyinstaller 4.2
python版本:3.6
打包系统环境:window10
原有系统介绍: flask开发的一个web站点,使用nginx作为web服务器,默认访问静态资源,url中带/api前缀的是访问后端接口(因为部分采用前后端分离VUE)。
【注意点1】
生成exe的命令:pyinstaller.exe -F -p C:\Users\用户名\AppData\Local\Programs\Python\Python36\Lib\site-packages -p D:\test\backend\app -p D:\test\backend\lib -p D:\test\backend\app\beans run.py
注意:网上搜索到的资料很多都是用英文分号分隔(;)的,可能是因为pyinstaller版本问题。4.2的版本指定多个环境位置,请采用上述方式。
至于需要加哪几个位置(-p),需要根据生成后的exe文件运行提示,再进行添加;只要提示找不到哪个包,那就加上这个包所在路径即可
【注意点2】
代码中涉及到目录的,都需要注意采用相对路径,否则会报大量的错误。
import os
import sys
if getattr(sys, 'frozen', False):
ROOT_PATH = os.path.dirname(sys.executable)
elif __file__:
ROOT_PATH = os.path.dirname(__file__)
【注意点3】
windows环境下路径中的 / 需要修改成 \\ ;这个是系统原因
可以将代码中涉及到路径的都采用 os.sep 来代替,比如
【注意点4】
模板文件拷贝到dist目录,但是运行exe文件后,发现还是提示找不到模板,这时需要修改模板路径为绝对路径
将 app = Flask(__name__, template_folder='./templates')
修改为
app = Flask(__name__, template_folder=ROOT_PATH + os.sep + 'templates')
【注意点5】
请求的接口中如果带特殊前缀的,比如/api需要都去掉,因为不走nginx反向代理了。
【注意点6】
代码中涉及路径的也全部改掉。
【注意点7】
本地测试没有问题后,一定要将打包完的文件拷贝到其它机器上(没有python环境的),运行测试,会出各种乱七八糟的问题。