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

 更新时间:2023年11月07日 10:11:16   作者:python阿元  
这篇文章主要介绍了如何将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的环境,能够在一定的程度上解决跨平台发布的问题。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • PyTorch零基础入门之构建模型基础

    PyTorch零基础入门之构建模型基础

    PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序,它是一个可续计算包,提供两个高级功能:1、具有强大的GPU加速的张量计算(如NumPy)。2、包含自动求导系统的深度神经网络
    2021-10-10
  • 使用Python中的pytesseract模块实现抓取图片中文字

    使用Python中的pytesseract模块实现抓取图片中文字

    最近同事用网上提供扫描软件进行扫描识别文字,每天上线只能够做两次扫描,请求我研发一个小工具帮助解决识别图片的中文字,最终我选择使用pytesseract模块可以解决这个需求问题,本文给大家分享实现代码操作感兴趣的朋友跟随小编一起看看吧
    2022-11-11
  • django 快速启动数据库客户端程序的方法示例

    django 快速启动数据库客户端程序的方法示例

    这篇文章主要介绍了django 快速启动数据库客户端程序的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 详解Python的Django框架中inclusion_tag的使用

    详解Python的Django框架中inclusion_tag的使用

    这篇文章主要介绍了详解Python的Django框架中inclusion_tag的使用,文中示例基于Python较早的2.x版本,希望能够注意一下,需要的朋友可以参考下
    2015-07-07
  • Python3字符串encode与decode的讲解

    Python3字符串encode与decode的讲解

    今天小编就为大家分享一篇关于Python3字符串encode与decode的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • 使用Python在PDF中设置图片透明度的操作方法

    使用Python在PDF中设置图片透明度的操作方法

    在 PDF 文档编辑中,适当地调整图片的透明度,可以帮助实现更平衡的版面效果,使内容层次更清晰、视觉更协调,助 Free Spire.PDF for Python,我们可以通过简单的 Python 代码灵活设置图片的透明度,而无需借助复杂的图像编辑软件,需要的朋友可以参考下
    2025-11-11
  • Python利用Matplotlib库实现绘制饼形图

    Python利用Matplotlib库实现绘制饼形图

    这篇文章主要为大家分享了基于python+matplotlib库的饼形图绘制,具体内容涉及一般的饼图、分裂饼图、以及环形图,感兴趣的小伙伴可以了解一下
    2022-04-04
  • 深入了解Python数据类型之列表

    深入了解Python数据类型之列表

    下面小编就为大家带来一篇深入了解Python数据类型之列表。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • Python中生成随机整数的三种方法

    Python中生成随机整数的三种方法

    本文介绍了如何在Python中生成一到一百随机整数的多种方法,包括random库,NumPy库和random.sample函数这三种方法,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • pymilvus offset参数不生效解决示例

    pymilvus offset参数不生效解决示例

    这篇文章主要为大家介绍了pymilvus offset参数不生效解决示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09

最新评论