Python脚本导出为exe程序

记录一下怎样把Python打包成window下的exe

pyinstaller简介

pyinstaller将Python脚本打包成可执行程序,使在没有Python环境的机器上运行
最新版是pyinstaller 3.1.1。支持python2.7和python3.3+。 可运行在Windows,Mac和Linux操作系统下。 但它不是跨编译的,也就是说在Windows下用PyInstaller生成的exe只能运行在Windows下,在Linux下生成的只能运行在Linux下。

安装pyinstaller

使用命令pip install pyinstaller即可 在windows下,pyinstaller需要PyWin32的支持。当用pip安装pyinstaller时未找到PyWin32,会自动安装pypiwin32

打包

打包的app里并不包含任何源码,但将脚本的.pyc文件打包了。

基本语法: pyinstaller options myscript.py
常用的可选参数如下:

1
2
3
4
5
6
7
8
–-onefile 将结果打包成一个可执行文件 
–-onedir 将所有结果打包到一个文件夹中,该文件夹包括一个可执行文件和可执行文件执行时需要的依赖文件(默认)
–-paths=DIR 设置导入路径
–-distpath=DIR 设置将打包的结果文件放置的路径
–-specpath=DIR 设置将spec文件放置的路径
–-windowed 使用windows子系统执行,不会打开命令行(只对windows有效)
–-nowindowed 使用控制台子系统执行(默认)(只对windows有效)
–-icon=

或者

1
2
3
4
5
6
-F 表示生成单个可执行文件
-D –onedir 创建一个目录,包含exe文件,但会依赖很多文件(默认选项)
-w 表示去掉控制台窗口,这在GUI界面时非常有用。不过如果是命令行程序的话那就把这个选项删除吧
-c –console, –nowindowed 使用控制台,无界面(默认)
-p 表示你自己自定义需要加载的类路径,一般情况下用不到
-i 表示可执行文件的图标

其他参数,可以通过pyinstaller –help查看

示例程序hello.py

1
2
print("测试打包exe")
pause()

打包命令

1
pyinstaller --onefile --nowindowed hello.py

执行完之后会在当前文件下形成build文件夹、dist文件夹和.spec文件。 dist里就是hello.exe可执行文件。

可能遇到的问题

pyinstaller打包报错:AttributeError: ‘str’ object has no attribute ‘items’

解决办法:对setuptools这个包进行升级

1
pip install --upgrade setuptools

pyinstaller打包报错:UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xce in position 130: invalid continuation byte

解决办法:
编码格式问题(可直接解决问题)
1、首先尝试将中文解释都去掉
2、然后,改变控制台的编码格式为utf-8
先在控制台中输入

1
chcp 65001

然后再使用

1
pyinstaller -F ***.py

打包即可!

打赏

请我喝杯咖啡吧~

支付宝
微信