写点什么

Python 打包成 exe 的方法介绍

  • 2024-05-23
    湖南
  • 本文字数:1289 字

    阅读完需:约 4 分钟

python 的开发效率非常的高,但是当我们用 python 写一些小工具需要给用户使用的时候,用户大多数是没有安装 python 的。本文介绍两种 python 的打包方案,使用pyinstallernuitka打包成 exe(或其他操作系统的可执行程序)后便可以直接分发给用户,无需用户安装 python。

对比

示例程序

这边使用 pyqt6 来做演示,使用 pyqt6 我们可以快速创建一个跨平台原生 gui 程序,也是这两个打包工具最常用的场景之一。


安装 pyqt6 库:

pip install pyqt6
复制代码

创建 mainwindow.py,写入以下内容:

import sysfrom PyQt6.QtWidgets import QWidget, QToolTip, QPushButton, QApplicationfrom PyQt6.QtGui import QFont
class Example(QWidget): def __init__(self): super().__init__() self.initUI()
def initUI(self): QToolTip.setFont(QFont("SansSerif", 10)) self.setToolTip("This is a <b>QWidget</b> widget") btn = QPushButton("Button", self) btn.setToolTip("This is a <b>QPushButton</b> widget") btn.resize(btn.sizeHint()) btn.move(50, 50) self.setGeometry(300, 300, 300, 200) self.setWindowTitle("Tooltips") self.show()
def main():
app = QApplication(sys.argv) ex = Example() sys.exit(app.exec())
if __name__ == "__main__": main()
复制代码

执行程序:

python mainwindow.py
复制代码

执行后会打开一个 demo 窗口:


pyinstaller

安装:

pip installer pyinstaller
复制代码

打包为文件夹:

pyinstaller -D -w ./mainwindow.py
复制代码

该命令会打包 exe、python 解释器和其他 dll 到 dist/mainwindow 中。


打包为单个 exe:

pyinstaller -F -w ./mainwindow.py
复制代码


该命令只输出一个 mainwindow.exe 到 dist 目录中,打开 dist/mainwindow.exe 时会将所有依赖项解压到临时目录中然后运行,当然这一步对用户是无感的。


使用这两种方法生成的 exe 都可以直接分发给用户,pyinstaller 是大多数时候的首选项,方便快捷。不过 pyinstaller 最大的问题是无法隐藏源码以及效率稍微慢一些。

nuitka

nuitka 使用 c 语言编译器将 python 源码及模块编译成原生二进制,据此可以做到完全隐藏源码,同时提高运行效率。


安装:

pip installer nuitka
复制代码

安装的时候 nuitka 会根据我们的操作系统选择最佳的 c 语言编译器。


打包为文件夹:

python -m nuitka mainwindow.py --standalone --enable-plugin=pyqt6 --disable-console
复制代码


该命令会打包 exe、python 解释器和其他 dll 到 dist/mainwindow 中。


因为我们使用了 pyqt6 库,所以需要加参数 --enable-plugin=pyqt6,没有用到的话可以不加。


打包成功后会打包所有依赖和模块到目录 mainwindow.dist ,双击里面的 mainwindow.exe 即可正常运行程序。


打包为单个 exe:

python -m nuitka mainwindow.py --onefile --enable-plugin=pyqt6 --disable-console
复制代码


该命令会输出 mainwindow.exe 到当前目录下,我们可以直接拿来执行或者分发给其他用户。需要注意的是这种方式也是解压到临时目录中,效率相比打包成文件夹慢一点,但是整体还是比 pyinstaller 快。


作者:AlpsMonaco

链接:https://juejin.cn/post/7369876349488775207

用户头像

欢迎关注,一起学习,一起交流,一起进步 2020-06-14 加入

公众号:做梦都在改BUG

评论

发布
暂无评论
Python打包成exe的方法介绍_Python_我再BUG界嘎嘎乱杀_InfoQ写作社区