Python打包成exe的两种方法
python的开发效率非常的高,但是当我们用python写一些小工具需要给用户使用的时候,用户大多数是没有安装python的。
本文介绍两种python的打包方案,使用pyinstaller和nuitka打包成exe(或其他操作系统的可执行程序)后便可以直接分发给用户,无需用户安装python。
对比
pyinstaller | nuitka | |
---|---|---|
打包速度 | 快 | 慢,要编译 |
是否支持加密源码 | 否 | 是 |
运行速度 | 本质还是调用python执行py源码,速度尚可 | py源码编译成二进制,快 |
是否可定制打包内容 | 是 | 是 |
示例程序
这边使用pyqt6来做演示,使用pyqt6我们可以快速创建一个跨平台原生gui程序,也是这两个打包工具最常用的场景之一。
安装pyqt6库:
创建mainwindow.py,写入以下内容:
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()
执行程序:
pyinstaller
安装:
打包为文件夹:
该命令会打包exe、python解释器和其他dll到 dist/mainwindow 中。
打包为单个exe:
该命令只输出一个mainwindow.exe到dist目录中,打开 dist/mainwindow.exe 时会将所有依赖项解压到临时目录中然后运行,当然这一步对用户是无感的。
使用这两种方法生成的exe都可以直接分发给用户,pyinstaller是大多数时候的首选项,方便快捷。不过pyinstaller最大的问题是无法隐藏源码以及效率稍微慢一些。
nuitka
nuitka使用c语言编译器将python源码及模块编译成原生二进制,据此可以做到完全隐藏源码,同时提高运行效率。
安装:
安装的时候nuitka会根据我们的操作系统选择最佳的c语言编译器。
打包为文件夹:
该命令会打包exe、python解释器和其他dll到 dist/mainwindow 中。
因为我们使用了pyqt6库,所以需要加参数 --enable-plugin=pyqt6,没有用到的话可以不加。
打包成功后会打包所有依赖和模块到目录 mainwindow.dist ,双击里面的 mainwindow.exe 即可正常运行程序。
打包为单个exe:
该命令会输出 mainwindow.exe 到当前目录下,我们可以直接拿来执行或者分发给其他用户。
需要注意的是这种方式也是解压到临时目录中,效率相比打包成文件夹慢一点,但是整体还是比 pyinstaller 快。
到此这篇关于Python打包成exe的两种方法的文章就介绍到这了,更多相关Python打包成exe内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
本站大部分文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。
如果侵犯了您的权益请来信告知我们删除。邮箱:1451803763@qq.com