• 将python脚本打包为exe可执行文件


    技术背景

    在很多情况下,编程人员是在Linux环境下完成的编程任务,但是更多的使用人员是在Windows环境下的,比方说,在参考链接1的文章中提到:

    那么我们就不得不考虑一个环境转化的问题。python作为一门通用编程语言,本身可以在不同的环境下运行,但可执行文件不是。就目前来说,最便捷的方法还是在各自的平台上去用pyinstaller编译可执行文件。

    编写python脚本

    当我们编译可执行文件时,首先我们需要一个可以执行的python任务脚本,这个脚本的内容可以是一系列复杂的运算,可以是显示一张图片,也可以是一整个完整的PC端软件。这里我们所写的一个任务是,用numpy创建一个离散的正弦函数图像,然后使用matplotlib将其展示出来:

    # plot.py
    import numpy as np
    import matplotlib.pyplot as plt
    
    x = np.linspace(0,10,1000)
    y = np.sin(x)
    
    plt.figure()
    plt.plot(x,y,'o',color='green')
    plt.show()
    

    需要注意的是,如果是创建的python脚本中依赖于一些打印输出函数,那在编译可执行文件时需要指定弹出终端窗口,否则程序没办法正确执行。

    安装pyinstaller并编译可执行文件

    pyinstaller也是一个跨平台的python工具,在windows和linux上面都可以使用pip来进行安装和管理:

    python3 -m pip install pyinstaller
    

    先以linux平台为例,安装pyinstaller成功之后,可以直接执行如下指令对python脚本进行编译:

    $ pyinstaller -F plot.py
    ...
    $ ll
    total 24
    drwxr-xr-x 4 dechin dechin 4096 Apr 20 14:26 ./
    drwxr-xr-x 4 dechin dechin 4096 Apr 19 22:31 ../
    drwxr-xr-x 3 dechin dechin 4096 Apr 20 14:26 build/
    drwxr-xr-x 2 dechin dechin 4096 Apr 20 14:28 dist/
    -rw-r--r-- 1 dechin dechin  160 Apr 20 14:21 plot.py
    -rw-r--r-- 1 dechin dechin  808 Apr 20 14:26 plot.spec
    $ ll dist/
    total 264376
    drwxr-xr-x 2 dechin dechin      4096 Apr 20 14:28 ./
    drwxr-xr-x 4 dechin dechin      4096 Apr 20 14:26 ../
    -rwxr-xr-x 1 dechin dechin 270710928 Apr 20 14:28 plot*
    

    我们可以看到,编译成功后,在当前的路径下回生成build和dist文件夹,其中可执行文件就放在dist路径下。在linux下可以直接使用./plot的指令来运行该可执行文件,效果如下:

    关于pyinstaller的指令,常用的还有指定不弹出终端窗口的指令(用于输出程序打印内容)以及程序显示logo的指令(一般为ico文件):

    pyinstaller -F -w plot.py # 不弹出黑色对话框
    pyinstaller -F -i ico_file.ico plot.py # 指定显示图标
    

    在linux环境下完成编译后,我们可以看到生成的可执行文件也只能在linux环境下运行。为了生成windows环境下可以运行的exe可执行文件,我们切换到windows系统下来运行:

    Mode                 LastWriteTime         Length Name
    ----                 -------------         ------ ----
    d-----         2022/4/20     14:28                dist
    d-----         2022/4/20     14:26                build
    ------         2022/4/20     14:26            808 plot.spec
    ------         2022/4/20     14:21            160 plot.py
    
    
    PS > pyinstaller -F .\plot.py
    ...
    47314 INFO: Appending PKG archive to EXE
    62696 INFO: Building EXE from EXE-00.toc completed successfully.
    PS > ls .\dist\
    
    
        目录: \\wsl.localhost\Ubuntu-18.04\home\dechin\projects\project0331\dist
    
    
    Mode                 LastWriteTime         Length Name
    ----                 -------------         ------ ----
    ------         2022/4/20     14:28      270710928 plot
    ------         2022/4/20     14:40       36811075 plot.exe
    
    

    也是同样的运行方法,编译完成后在dist文件夹下生成了一个新的可执行文件plot.exe,执行效果如下:

    在windows环境下运行软件经常会弹出一些窗口,我们直接放行就好了:

    可以看到,虽然跟linux下可执行文件的运行结果,在视觉效果上略有差异,但基本上还是大同小异。

    总结概要

    在完成一个软件或者程序的实现之后,最后的一步就是发布,发布的目的是为了让更多的人来使用这个项目,而大部分的人是没有相应的编程环境的,因此我们必须考虑将代码编译成各个平台的可执行文件,再发布给用户去使用。本文主要介绍通过pyinstaller在linux和windows上分别打包python脚本为可执行文件,想要跨平台的编译软件就目前而言实现起来还比较困难,博主本地使用的是Win11+WSL2 Ubuntu Linux的环境,能够在一定的程度上解决跨平台发布的问题。

    版权声明

    本文首发链接为:https://www.cnblogs.com/dechinphy/p/second-quantization.html

    作者ID:DechinPhy

    更多原著文章请参考:https://www.cnblogs.com/dechinphy/

    打赏专用链接:https://www.cnblogs.com/dechinphy/gallery/image/379634.html

    腾讯云专栏同步:https://cloud.tencent.com/developer/column/91958

    CSDN同步链接:https://blog.csdn.net/baidu_37157624?spm=1008.2028.3001.5343

    51CTO同步链接:https://blog.51cto.com/u_15561675

    参考链接

    1. https://www.cert.org.cn/publish/main/upload/File/2019 1 operating system.pdf
  • 相关阅读:
    Win11无法将值写入注册表项如何解决?
    C语言笔记25 •顺序表介绍•
    湖北省2022年高企申报奖励补贴以及申报材料流程讲解(认定条件要求内容)
    Autowiring Dependencies
    玩转SQL语句之group by 多字段分组查询与having子句,一篇解决你的疑惑!
    【R语言】 as.Date日期格式标准化
    【B+树索引】索引的使用和注意事项
    贝叶斯分类(朴素)
    四十五、壁面函数理论及y+的确定
    VS Code插件 — Settings Sync : 设置和同步用户配置
  • 原文地址:https://www.cnblogs.com/dechinphy/p/py2exe.html