Python打包成exe的两种方法
原创目录
- 对比
- 示例程序
- pyinstaller
- nuitka
python的开发高效能非常的高,但是当我们用python写一些小工具需要给用户使用的时候,用户大多数是没有安装python的。
本文介绍两种python的打包方案,使用pyinstaller
和nuitka
打包成exe(或其他操作系统的可执行程序)后便可以直接分发给用户,无需用户安装python。
对比
pyinstaller | nuitka | |
---|---|---|
打包速度 | 快 | 慢,要编译 |
是否赞成加密源码 | 否 | 是 |
运行速度 | 本质还是调用python执行py源码,速度尚可 | py源码编译成二进制,快 |
是否可定制打包内容 | 是 | 是 |
示例程序
这边使用pyqt6来做演示,使用pyqt6我们可以迅捷创建一个跨平台原生gui程序,也是这两个打包工具最常用的场景之一。
安装pyqt6库:
pip install pyqt6
创建mainwindow.py
,写入以下内容:
import sys from PyQt6.QtWidgets import QWidget, QToolTip, QPushButton, QApplication from 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
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 快。
到此这篇涉及Python打包成exe的两种方法的文章就介绍到这了,更多相关Python打包成exe内容请搜索IT视界以前的文章或继续浏览下面的相关文章期待大家以后多多赞成IT视界!