使用pyinstaller将python项目打包发布为exe可执行文件

pyinstaller模块用于将python项目打包发布成exe文件,以方便地在没有安装python环境的机器上运行。该模块使用 pip install pyinstaller 安装即可。

一、常用参数及含义

参数执行命令含义

-D

pyinstaller -D demo.py

默认选项。除了主程序demo.exe外,还会在在dist文件夹中生成很多依赖文件,推荐使用。

-c

pyinstaller -c demo.py

默认选项。使用控制台,只对windows有效。

-F

pyinstaller -F demo.py

只在dist文件夹中生成一个程序demo.exe文件,适用于没有多依赖.py文件的单个文件。

-w

pyinstaller -w demo.py

不使用控制台,只对windows有效。

-p

pyinstaller -p D:\project\demo.py

设置导入路径。

-i

pyinstaller -i D:\icons\demo.ico demo.py

给生成的demo.exe文件设置一个自定义的图标。

二、打包简单的.py文件

对一个简单.py文件,当没有依赖的其他路径下的.py文件、没有间接依赖的其他包、没有依赖的资源文件时,可使用命令pyinstaller –F xxx.py,直接打包成一个exe文件。

示例:一个简单的整数求和小程序

1) 命名calculator.py,写入内容

if __name__ == '__main__':
    print("求和小程序")
    a = input("请输入第一个数:")
    b = input("请输入第二个数:")
    print()
    c = int(a) + int(b)
    print("两数之和为:", c)
    input()

2) 使用命令pyinstaller -c –F calculator.py直接打包。执行完毕后,程序目录下生成了build、dist两个文件夹和一个calculator.spec文件。生成的exe文件即存在于dist文件夹中

        ——dist文件夹,发布目录,存放打包后的exe文件;

        ——build文件夹,存放一些中间过程文件,可忽略;

        ——.spec文件,即配置文件,用于打包复杂的python项目。

3) 双击calculator.exe,启动运行

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FsYmVydDIwMTYwNQ==,size_16,color_FFFFFF,t_70

三、由spec配置文件打包复杂的项目

实际的项目往往是复杂的,或有许多依赖的其他路径下的.py文件,或有许多间接依赖的包,或有许多涉及的资源文件,因此,需要通过spec配置文件进行打包发布。

由spec配置文件打包发布完毕后,必定会在dist中生成一个文件夹,里面不只有生成的exe文件,还有许多其他的依赖文件。此模式下,通常使用命令 pyinstaller –D xxx.spec 进行发布。

基本步骤:

s1.生成spec文件:执行命令 pyi-makespec main.py ,执行后生成main.spec文件(main.py是项目启动的入口文件);

s2.完善spec文件中的内容

1) Analysis的第一个列表:填入需要打包的.py文件路径,以字符串形式作为列表元素填入。

注:a.填的路径是绝对路径,目录使用双反斜杠避开转义符;

       b.打包操作实质上就是将这些文件直接复制到生成的包中。

2) Analysis的datas列表:填入需要打包的非.py类型资源文件,以元组形式作为列表元素填入,路径写至最后一个目录层级。

注:a.填的路径是绝对路径,目录使用双反斜杠避开转义符;

       b.打包操作实质上就是将这些文件复制到生成的包中。

3) Analysis的hiddenimports列表:填入需要直接或间接依赖的一系列包名。

猜测:在pyinstaller打包的过程中,实际上可以包含程序直接依赖的包,但无法包含间接依赖的包,因此需要在hiddenimports列表中配置导入。

写法示例

a = Analysis(['test.py',
'D:\\deploy\\a.py',
'D:\\deploy\\b.py',
'D:\\deploy\\c.py'],
             pathex=['D:\\PycharmProjects\\Test'],
             binaries=[],
             datas=[('D:\\deploy\\resourceA','resourceA'),
             ('D:\\deploy\\resourceB','resourceB')],
             hiddenimports=['pandas','cython', 'sklearn','sklearn.metrics',
             'sklearn.metrics.get_scorer','sklearn.metrics.cluster',
             'sklearn.ensemble','sklearn.neighbors.typedefs','sklearn.neighbors.quad_tree',
             'sklearn.tree._utils','scipy._lib.messagestream','email.mime.message',
             'email.mime.image', 'email.mime.multipart', 'email.mime.audio', 'email.mime.text',
             'sklearn.neighbors._typedefs','sklearn.utils._weight_vector','sklearn.neighbors._quad_tree',
             'win32timezone'],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)

s3.打包发布

执行命令 pyinstaller –D main.spec,dist目录下的main文件夹即发布生成的项目文件。

四、问题处理

1.当双击exe文件无法看到错误信息时,可尝试通过cmd进入对应目录后命令运行:xxx.exe

2.对于hiddenimports里面不知道具体依赖的包有哪些,一个笨办法是,在cmd下执行xxx.exe,根据提示的错误信息,逐一加上缺失的包。

3.杀毒软件可能会干预,最好打包发布前退出杀毒软件。

 

参考

  1. https://www.cnblogs.com/milesma/p/12171893.html
  2. https://blog.csdn.net/weixin_43502949/article/details/101057825?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-3.control
  3. https://www.tqwba.com/x_d/jishu/162792.html

 

 

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

禺垣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值