Python 打包单文件可执行程序 - Go语言中文社区

Python 打包单文件可执行程序


这两天用Python写了个小工具,想要在没有安装Python的机器上执行,首先想到了pyinstaller 。

pyinstaller 打包程序通常只需要一句命令即可:

1. 打开cmd控制台,将目录切换到pyinstaller安装目录,我的在D:pythonPython36Scripts目录下;

2. 输入命令:pyinstaller  D:JetBrainsPyCharmworkspacenginx管理工具main.py  -F  -w  -i F:/图片/1.ico -n nginx管理工具  -p D:pythonPython36Libsite-packages 

说明:红色部分是自己要打包的主程序路径; 

红色部分之后的可选参数:

 -F:打包为单文件可执行程序,没有此参数的话会有很多其他文件跟可执行文件在一起

 -w:是否是窗口程序,不指定的话,程序运行的时候有个控制台黑窗口

 -i:可执行文件的图标

 -n:可执行文件的名称

 -p:打包时要包含的搜索目录,一般不用指定该项

其他参数可参照pyinstaller官方文档。

3. 如果配置没有问题,敲下回车键,等待一会儿即可编译完成。在Scripts目录下会生成一个dist目录,在该目录里即可查看编译生成的可执行程序,操作过程如下图:





一般情况下,这个可执行文件就可以单独运行了。不过我的程序稍微复杂些,我的程序是一个flask写的web程序。直接运行的话一直报模板文件找不到的错误,把模板文件复制到同一目录下也不起作用。百度没有找到解决方法,最后Google出来了解决方案:在创建flask的app对象的时候加上这个判断即可:

from flask import Flask
import sys
import os

app = None
if getattr(sys, 'frozen', False):
    template_folder = os.path.join(sys.executable, '..', 'templates')
    static_folder = os.path.join(sys.executable, '..', 'static')
    app = Flask(__name__, template_folder=template_folder, static_folder=static_folder)
else:
    app = Flask(__name__)
参考链接:https://stackoverflow.com/questions/32149892/flask-application-built-using-pyinstaller-not-rendering-index-html

接下来,再重新编译一下,把模板文件和可执行程序复制到同一目录,成功运行。





版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/u013314786/article/details/74392152
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 22:47:55
  • 阅读 ( 963 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢