技术背景

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

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

编写python脚本

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

# plot.py
import numpy as np
import matplotlib.pyplot as pltx = 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.pyPS > 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\distMode                 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的环境,能够在一定的程度上解决跨平台发布的问题。

将python脚本打包为exe可执行文件相关推荐

  1. 【Python实用技巧】如何将Python脚本打包成exe可执行文件?

    相信大家也有过这样的困惑,本来已经使用Python写好了脚本代码,又不想公开代码逻辑,但又要给别人使用这些功能? 这可怎么办呢? 有没有什么办法,可以将Python脚本打包成一个exe文件,这样发布的 ...

  2. MLGBD终于搞定了,将python脚本打包成exe可执行文件

    1.下载pyinstaller 我是使用git下载的 git clone https://github.com/pyinstaller/pyinstaller 2.下载pywin32相应版本并安装 一 ...

  3. python脚本打包成exe可执行文件

    1. 工具pyinstaller (pip install pyinstaller) 2.生成exe (pyinstaller -F -w Capturing_PDFs.py) 参数 -F 生成单个文 ...

  4. Tools_将Python脚本封装成exe可执行文件

    将Python脚本封装成exe可执行文件 将Python脚本封装成exe可执行文件 cx_freeze是用来将 Python 脚本封装成可执行程序的工具,支持最新的Python3.2版本.生成的执行文 ...

  5. python程序打包为exe可执行文件

    大家都知道,Python是一种脚本语言,也就是解释型的语言,需要解释器来进行解释以后才可以执行,而Python源代码需要在Python虚拟机上面运行,但是我们做好的程序,不可能给用户使用的时候还让他安 ...

  6. python程序打包成exe可执行文件,亲测可行(pyinstaller教程)

    python程序打包成exe可执行文件,亲测可行(pyinstaller教程)(11-20190214) 文章目录: 有些程序你不想让别人看到,由此程序你想做成绿色软件普惠大众,有些..., 然而你只 ...

  7. windows系统用cx_freeze给python程序打包成exe可执行文件

    转载请注明作者(独孤尚良dugushangliang)出处:https://blog.csdn.net/dugushangliang/article/details/81740340 本机window ...

  8. 将python程序打包成exe可执行文件

    方法一::打包完成后可以直接被他人使用,他人不用安装python环境的 可以使用pyinstaller模块实现将python项目打包成exe执行文件 """ 先安装模块 ...

  9. python程序打包成exe可执行文件

    1.安装pyinstaller模块: 2.验证安装成功pyinstaler,该步骤只是为了心理安慰: 3.将自己的python文件打包成exe: 输入命令:pyinstaller  -F    **\ ...

最新文章

  1. Python 实现链表和二叉树
  2. mysql 语句优化实例_MySQL 语句优化实例
  3. java 数组 内存_图解Java数组的内存分配
  4. 解决 IDEA 在 commit 代码时 git 日志乱码 (提交时填写的中文说明乱码)
  5. Python Pytest前置setup和后置teardown详解
  6. python文件处理seek()方法的参数是,在Python中操作文件之seek()方法的使用教程
  7. 《WinForm开发系列之控件篇》Item25 Lable(暂无)
  8. Android商城开发系列(六)——使用 OkHttpUtils 请求网络 + 使用 fastjson解析数据...
  9. JAVA大数据-Week4-DAY3
  10. PostgreSQL学习手册(函数和操作符三)
  11. win10多合一原版系统_win10多合一系统制作方法详解
  12. Tungsten Fabric入门宝典丨TF组件的七种“武器”
  13. 企业如何搭建商业智能BI,过程中又需要注意哪些事项
  14. Vue中 $event not defined
  15. 学校校车运营各项安全管理制度_学校校车安全管理制度.doc
  16. HMI-64-【多媒体】Ui全部制作完成
  17. 解决win10一开机内存(8G)就占用70%多,查看任务管理器并没有占用内存很高的进程的问题
  18. Python wxPython基本教程
  19. TCP/IP高频考点之一个数据包的流浪日记 - 网络层
  20. 购袖珍电子计算机笔记本,购买迷你电脑,哪个品牌值得信赖

热门文章

  1. YAML(YML)——入门
  2. 什么是编码?什么是解码?为什么要编码.解码?
  3. 选择尚学堂与传智播客的java培训?
  4. 从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时结束程序
  5. halcon中面到面的距离_halcon学习网
  6. 网络协议:HTTP的升级改进
  7. 安卓手机并没有“校准电池”的方式
  8. 【一看就懂】tf.logical_and(),tf.logical_or(),tf.logical_not(),tf.logical_xor()
  9. 学习java的第17天
  10. PLC通讯实现-C#实现AB-CIP以太网通讯