Python项目打包成exe -—— 详细教程

为什么要打包?

众所周知,Python脚本不能在没有安装Python的机器上运行。

那我们如果写了一个数据分析/自动化办公的小脚本,想分享给同事使用,可她电脑又没有装Python。

这个时候如果将脚本打包成exe文件,微信发送给她,即使她的电脑上没有安装Python解释器,这个exe程序也能在上面运行。

标准打包

目前比较常见的打包exe方法都是通过Pyinstaller来实现的,本文也将使用这种常规方法。如果对这块已经很熟悉的小伙伴,可以直接下滑到本文下半部分。

安装Pyinstaller

首先我们要先安装Pyinstaller,直接在cmd使用pip命令

pip install pyinstaller 

如果网速太慢可以切换国内源来加速,本文其他部分直接使用国内源,不再重复注释。

pip install -i https://pypi.douban.com/simple/ pyinstaller #豆瓣源
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller #清华源
Pyinstaller打包步骤

选择需要打包的python文件,待处理的python文件AiXinShu.py,以及准备好的软件图标图片tubiao.ico文件。

这里就给大家分享一个网站,可以把其他格式图片转成ico格式:

https://app.xunjiepdf.com/img2icon/

需要的文件如下:

 1、cmd切换到我们刚刚放文件的目录

 2、执行命令Pyinstaller -F -w -i tubiao.ico AiXinShu.py,然后等待执行结束。

 执行完毕会发现当前目录多了个文件夹,打开名为dist的文件夹。

已经生成了一个名为AiXinShu的exe应用程序,并且图标也是我们设置的图案,看来已经成功一半了。

要不运行一下,试试能否正常执行程序?

打包exe后执行

成功运行!

如果你的python文件比较大,生成的exe很大接着往下看

Pyinstaller参数详解

说回刚刚执行的命令

Pyinstaller -F -w -i tubiao.ico AiXinShu.py

给大家解释一下其中Pyinstaller的参数,其中-F参数代表制作独立的可执行程序。

-w是指程序启动的时候不会打开命令行。如果不加-w的参数,就会有黑洞洞的控制台窗口出来。比如在刚才的脚本里我加一行print('Hello World!'),那么就不要放-w参数了,不然运行会报错,毕竟Hello World!需要在命令行里打印出来。此外,-w参数在GUI界面时非常有用。

最后的-i tubiao.ico就是指设置自己的图标图案,因为默认打包图片是下图这样的。这个参数也可以写成--icon=tubiao.ico

最后稍微总结一下:

Pyinstaller -F AiXinShu.py 打包exe
 
Pyinstaller -F -w AiXinShu.py 不带控制台的打包
 
Pyinstaller -F -w -i tubiao.ico AiXinShu.py 打包指定exe图标打包

 以上三个是比较常用的参数,其他参数详见下表

 

压缩打包

Python打包为什么大?

在压缩打包之前,先简单说一下为什么Python打包过大?

Python打包exe,不但体积大而且运行奇慢。解释型语言大都是这个样子,只不过Python尤其突出。要解决大而慢,只能用编译型语言,如C,C++,甚至VB都好很多,体积最小的是汇编。[1]

此外,还有知乎大佬说是因为“Anaconda里内置了很多库,打包的时候打包了很多不必要的模块进去,要用纯净的Python来打包。”

所以我们可以模拟一个新环境,其中只安装我们本次打包所必要的工具包即可。

那最适合的就是——虚拟环境了!

虚拟环境

Python创建虚拟环境的方法有很多,我使用的是Anaconda,如果你跟我一样,那就简单了。(大家也可以使用Virtualenv、Pipenv来设置虚拟环境,善用搜索,方法大同小异)

先记几个命令,很简单

conda create -n 虚拟环境名字 python==3.6  #创建虚拟环境
 
conda activate 虚拟环境名字  #激活虚拟环境
 
conda deactivate  #退出虚拟环境

 从开始菜单运行“Anaconda Prompt”,出现的界面输入创建虚拟环境的指令。成功创建了一个名字为aotu,且基于python版本3.6的虚拟环境。

在创建过程中需要回复(y/n),Yes,再激活虚拟环境

conda安装的虚拟环境,会把虚拟环境的目录生成在anaconda安装目录下的env目录下。

 当然我们也可以在刚刚的窗口,使用命令conda info --envs,来查看conda环境下所有的虚拟环境

安装所需的库

上面我们已经创建并激活了名为aotu虚拟环境,输入conda list可以查看当前虚拟环境里已经安装的库。

我们打开所要打包的Python脚本,安装打包必不可少的pyinstaller库。

附上AiXinShu.py文件完整代码:

import turtle
import random

def love(x, y):  # 在(x,y)处画爱心lalala
    lv = turtle.Turtle()
    lv.hideturtle()
    lv.up()
    lv.goto(x, y)  # 定位到(x,y)

    def curvemove():  # 画圆弧
        for i in range(20):
            lv.right(10)
            lv.forward(2)

    lv.color('red', 'pink')
    lv.speed(10000000)
    lv.pensize(1)
    # 开始画爱心lalala
    lv.down()
    lv.begin_fill()
    lv.left(140)
    lv.forward(22)
    curvemove()
    lv.left(120)
    curvemove()
    lv.forward(22)
    lv.write("YZ", font=("Arial", 12, "normal"), align="center")  # 写上表白的人的名字
    lv.left(140)  # 画完复位
    lv.end_fill()


def tree(branchLen, t):
    if branchLen > 5:  # 剩余树枝太少要结束递归
        if branchLen < 20:  # 如果树枝剩余长度较短则变绿
            t.color("green")
            t.pensize(random.uniform((branchLen + 5) / 4 - 2, (branchLen + 6) / 4 + 5))
            t.down()
            t.forward(branchLen)
            love(t.xcor(), t.ycor())  # 传输现在turtle的坐标
            t.up()
            t.backward(branchLen)
            t.color("brown")
            return
        t.pensize(random.uniform((branchLen + 5) / 4 - 2, (branchLen + 6) / 4 + 5))
        t.down()
        t.forward(branchLen)
        # 以下递归
        ang = random.uniform(15, 45)
        t.right(ang)
        tree(branchLen - random.uniform(12, 16), t)  # 随机决定减小长度
        t.left(2 * ang)
        tree(branchLen - random.uniform(12, 16), t)  # 随机决定减小长度
        t.right(ang)
        t.up()
        t.backward(branchLen)






if __name__ == '__main__':
    #设置画布的背景色
    turtle.bgcolor("Sky blue")
    try:
        myWin = turtle.Screen()
        t = turtle.Turtle()
        t.hideturtle()
        t.speed(1000)
        t.left(90)
        t.up()
        t.backward(200)
        t.down()
        t.color("brown")
        t.pensize(32)
        t.forward(60)
        tree(100, t)
        myWin.exitonclick()
        turtle.done()
    except Exception as e:
        print()
        # turtle.bye()

图标文件(tubiao.ico)请自行生成:

这里就给大家分享一个网站,可以把其他格式图片转成ico格式:

https://app.xunjiepdf.com/img2icon/

安装库的过程不再赘述

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller

  安装后再看

已成功安装,还有一些因为这几个库所附带安装的,就不管他们了。

Pyinstaller打包步骤

这里就不再重复了

Pyinstaller -F -w -i tubiao.ico AiXinShu.py

 生成后exe变小了很多,点击运行,一切正常。

最后再简单总结一下虚拟环境+打包的全过程(只三步):

#创建虚拟环境
conda create -n aotu python=3.6
 
#激活虚拟环境
conda activate aotu
 
#Pyinstaller打包
Pyinstaller -F -w -i tubiao.ico AiXinShu.py

本次分享到此结束,觉得有所帮助的朋友点点关注点点赞!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小蜜蜂vs码农

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

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

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

打赏作者

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

抵扣说明:

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

余额充值