Python打包成exe的两种方法

 更新时间:2024年05月21日 08:55:09   作者:AlpsMonaco  
python的开发效率非常的高,但是当我们用python写一些小工具需要给用户使用的时候,用户大多数是没有安装python的,本文介绍两种python的打包方案,使用pyinstaller和nuitka打包成exe,文中通过代码示例介绍的非常详细,需要的朋友可以参考下

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

对比

pyinstallernuitka
打包速度慢,要编译
是否支持加密源码
运行速度本质还是调用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.exedist目录中,打开 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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • OpenCV根据面积筛选连通域学习示例

    OpenCV根据面积筛选连通域学习示例

    这篇文章主要为大家介绍了OpenCV根据面积筛选连通域学习示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Python3实现发送QQ邮件功能(附件)

    Python3实现发送QQ邮件功能(附件)

    这篇文章主要为大家详细介绍了Python3实现发送QQ邮件功能,附件方面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • python数据可视化绘制火山图示例

    python数据可视化绘制火山图示例

    这篇文章主要为大家介绍了python数据可视化绘制火山图示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • python代码实现逻辑回归logistic原理

    python代码实现逻辑回归logistic原理

    这篇文章主要介绍了python代码实现逻辑回归logistic原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Python 3.6打包成EXE可执行程序的实现

    Python 3.6打包成EXE可执行程序的实现

    这篇文章主要介绍了Python 3.6打包成EXE可执行程序的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • 浅谈Django QuerySet对象(模型.objects)的常用方法

    浅谈Django QuerySet对象(模型.objects)的常用方法

    这篇文章主要介绍了浅谈Django QuerySet对象(模型.objects)的常用方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • python实现简单tftp(基于udp协议)

    python实现简单tftp(基于udp协议)

    这篇文章主要为大家详细介绍了python实现简单tftp,基于udp协议,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • PyYAML高级用法全揭秘

    PyYAML高级用法全揭秘

    YAML是一种可读的数据序列化格式,常用于配置文件、数据交换等场景,本文主要介绍了PyYAML高级用法,具有一定的参考价值,感兴趣的可以了解一下
    2025-04-04
  • Python os.rename() 重命名目录和文件的示例

    Python os.rename() 重命名目录和文件的示例

    今天小编就为大家分享一篇Python os.rename() 重命名目录和文件的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Python subprocess模块功能与常见用法实例详解

    Python subprocess模块功能与常见用法实例详解

    这篇文章主要介绍了Python subprocess模块功能与常见用法,结合实例形式详细分析了subprocess模块功能、常用函数相关使用技巧,需要的朋友可以参考下
    2018-06-06

最新评论