PyInstaller打包python脚本

       因为写了一个小工具,自动生成需求统计的内容,但是同事又不可能在电脑上也装上python以及相关的包依赖(别人一看就觉得太麻烦而且太冗余),于是就想着将写好的python脚本打包成exe,直接双击使用,方便快捷。

说干就干,先是花点时间写完了脚本;然后搜索了相关的关键词,找到了py2exe、PyInstaller、cx_Freeze等工具,最后确定使用PyInstaller

使用PyInstaller有几个原因:

  • PyInstaller现在仍然在更新
  • PyInstaller使用方法简单,py2exe比较繁琐
  • PyInstaller网上教程比较多

安装PyInstaller

推荐使用pip安装

pip install pyinstaller

安装完后,直接输入pyinstaller

usage: pyinstaller-script.py [-h] [-v] [-D] [-F] [--specpath DIR] [-n NAME]
                             [-p DIR] [--hidden-import MODULENAME]
                             [--additional-hooks-dir HOOKSPATH]
                             [--runtime-hook RUNTIME_HOOKS]
                             [--exclude-module EXCLUDES] [--key KEY] [-d] [-s]
                             [--noupx] [-c] [-w]
                             [-i <FILE.ico or FILE.exe,ID or FILE.icns>]
                             [--version-file FILE] [-m <FILE or XML>]
                             [-r RESOURCE] [--uac-admin] [--uac-uiaccess]
                             [--win-private-assemblies]
                             [--win-no-prefer-redirects]
                             [--osx-bundle-identifier BUNDLE_IDENTIFIER]
                             [--distpath DIR] [--workpath WORKPATH] [-y]
                             [--upx-dir UPX_DIR] [-a] [--clean]
                             [--log-level LEVEL] [--upx UPX]
                             scriptname [scriptname ...]
pyinstaller-script.py: error: the following arguments are required: scriptname

可以看到PyInstaller的信息,说明安装完成,可以使用了;详细帮助可以pyinstaller -h查看。

使用PyInstaller

PyInstaller的使用非常简单:

# 打包成一个文件
pyinstaller -F test.py
# 打包成文件夹(默认)
pyinstaller test.py
#打包成一个exe,关闭命令,指定新文件名
pyinstaller -F -w D:\autoProject\testcase\main.py -n 测试报告生成器

因为要精简到底,所以我选择打包成一个文件。

先cd到pyinstaller的安装文件夹,然后输入命令 pyinstaller -F 要打包的文件的路径地址,如下

执行完之后,看下下面的日志,说明打包成功

打包完成后,打开dist文件夹,里面的那个exe文件就是打包好的程序,运行测试一下是否打包成功。

PyInstaller选项说明

  • -D, --one-dir打包成一个文件夹,默认
  • -F, --one-file打包成一个exe文件
  • -p DIR, --paths DIR添加路径,一般用来添加程序所用到的包的所在位置
  • -c, --console, --nowindowed提供程序视窗,程序有输入输出的界面,默认
  • -w, --windowed, --noconsole无视窗,程序后台运行
  • -i <FILE.ico or FILE.exe,ID or FILE.icns>, --icon <FILE.ico or FILE.exe,ID or FILE.icns>添加icon图标
  •  

     

 

打包过程遇到的问题

1、AttributeError: module 'enum' has no attribute 'IntFlag'

 

 原因:

This is likely caused by the package enum34. Since python 3.4 there's a standard library enum module, so you should uninstall enum34, which is no longer compatible with the enum in the standard library since enum.IntFlag was added in python 3.6.

这可能是由包Enum34引起的。因为Python3.4有一个标准库枚举模块,所以您应该卸载Enum34,因为在Python3.6中添加了Enum.Intflag,所以它不再与标准库中的枚举兼容。

解决:pip uninstall enum34   #卸载enum34

 

 

posted @ 2021-11-09 14:14  溪棱  阅读(109)  评论(0编辑  收藏  举报