开发者

Python代码打包为单个可执行文件实现过程

目录
  • PyInstaller
    • 1. 安装
    • 2. 基本用法
    • 3. 常用参数
    • 4. 配置文件
    • 5. 常见问题
  • Nuitka
    • 1. 安装
    • 2. 打包命令
    • 3. 常用参数
    • 4. 其他用途
  • 总结

    目前最常用的两种方法是使用 Nuihttp://www.devze.comtkaPyInstaller

    • PyInstaller:这是一个非常流行的工具,可以将python脚本打包为单个可执行文件,支持Windows、MACOS和linux。它还能够自动检测并包含大多数Python包和库。优点是简单易用,缺点是在运行时会释放一堆临时文件。
    • Nuitka: 是将Python代码编译为C/C++代码的编译器,然后再使用C/C++编译器生成可执行文件。与其他打包工具相比,它能产生性能更优的可执行文件。优点是打包后文件执行效率高,缺点是打包速度慢且某些库不兼容。

    PyInstaller

    1. 安装

    pip install pyinstaller
    

    2. 基本用法

    pyinstaller main.py
    pyinstaller --onefile main.py
    pyinstaller --onefile --name=hello main.py
    

    3. 常用参数

    参数说明
    --onefile将所有依赖打包成一个单独的可执行文件。没有这个选项时,生成的可执行文件将依赖于多个文件
    --windwww.devze.comowed打包为 GUI 应用程序,不PNZCzC显示控制台窗口(仅适用于 Windows 和 macOS)
    --name指定生成的可执行文件的名称
    --icon为生成的可执行文件指定图标文件。图标文件通常为php .ico(Windows)或 .icns(macOS)格式。
    --add-data添加额外的数据文件。格式为 source:destination,其中 source 是本地路径,destination 是可执行文件内的android路径。
    --hidden-import手动指定需要包含的模块。如果某些模块在运行时动态导入,PyInstaller 可能无法自动检测到这些依赖项
    --exclude-module手动排除某些模块

    示例用法如下:

    pyinstaller --onefile \
                --windowed \
                --name=my_program \
                --icon=assets/app_icon.ico \
                --add-data="resources/config.json;resources" \
                --hidden-import=json \
                main.py
    

    4. 配置文件

    PyInstaller 在首次运行时会生成一个 .spec 文件,这个文件定义了打包的所有配置。你可以编辑这个文件来自定义打包过程。

    在生成的 my_program.spec 文件中,你可以自定义一些高级选项,比如添加额外的数据文件、指定打包目录等。

    例如,添加一个额外的数据文件到 datas 列表中:

    datas=[('data_folder/*', 'data')]
    

    使用自定义的 .spec 文件进行打包:

    pyinstaller my_program.spec
    

    5. 常见问题

    pyinstaller 执行后报错通常为以下类似问题,手动导入模块即可解决

    # 未正常导入:Crypto.Cipher.PKCS1_v1_5 
    ImportError: cannot import name 'PKCS1_v1_5' from 'Crypto.Cipher'
    
    # 未正常导入:Crypto.PublicKey.RSA
    ImportError: cannot import name 'RSA' from 'Crypto.PublicKey'
    
    # 未正常导入:boto3
    ModuleNotFoundError: No module named 'boto3'
    
    # 未正常导入:tqdm
    ModuleNotFoundError: No module named 'tqdm'
    

    Nuitka

    1. 安装

    pip install nuitka
    

    同时确保安装了 C 编译器,如 gcc(Linux)、clang(macOS)、msvc(Windows)或者 MinGW-w64(Windows)。

    在 Windows 上,建议使用 MinGW-w64。

    2. 打包命令

    nuitka --standalone main.py
    
    # 使用pandas
    nuitka --standalone --onefile --plugin-enable=pandas  script.py
    
    # 使用tkinter、numpy
    nuitka --standalone --follow-imports --plugin-enable=tk-inter --plugin-enable=numpy example.py
    
    # 打包为单文件
    nuitka --standalone --onefile --show-progress  --lto=yes script.py
    

    3. 常用参数

    • --standalone:生成一个包含所有依赖的目录
    • --onefile:将所有内容打包成一个单一的可执行文件,pip install zstandard 可减小大小
    • --follow-imports:自动导入所需模块
    • --plugin-enable:用于启用特定的编译插件,例如:tkinter、PyQt5、Numpy等
    • --show-progress:展示打包进度
    • --windows-icon:指定程序图标
    • --windows-disable-console:去掉控制台窗口
    • --lto=yes:启用链接时优化(Link Time Optimization),可以生成更小、更快的二进制文件。

    4. 其他用途

    编译 .py 文件为 .pyd

    nuitka --module your_script.py
    

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜