脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - python代码打包成可执行文件(exe)

python代码打包成可执行文件(exe)

2023-10-06 15:12中年猿人 Python

我们在开发完一个小项目后,想要把项目发布出来给别人用。通常都会把代码打包成exe后再给别人,而不是让别人去安装运行环境再跑裸代码。本文就是介绍如何使用pyinstaller这个工具将python带包成可直接运行的exe。

【前言】:我们在开发完一个小项目后,想要把项目发布出来给别人用。通常都会把代码打包成exe后再给别人,而不是让别人去安装运行环境再跑裸代码。本文就是介绍如何使用pyinstaller这个工具将python带包成可直接运行的exe。

▍概述

在介绍pyinstaller之前,先简单介绍下其它几个可以用于打包python代码的工具:

  • cx_Freeze:可以将Python脚本转换为独立的可执行文件,支持多个平台。

  • PyInstaller:可以将Python脚本(或模块)转换为单个可执行文件或目录,支持多个平台。

  • PyOxidizer:功能类似于PyInstaller,但它可以生成自包含的二进制文件,可以跨平台使用。

  • Py2exe:仅适用于Windows平台,可以将Python脚本转换为.exe可执行文件。

Pyinstaller打包代码的步骤有:

  1. 使用pip install pyinstaller命令安装pyinstaller库。

  2. pyinstaller提供两种打包方式;

    **方式一:**在cmd终端进入要打包的Python文件所在目录,使用pyinstaller xxx.py命令打包代码。

    **方式二:**在cmd终端进入要打包的Python文件所在目录,使用pyi-makespec xxx.py命令生成spec文件,然后对spec需要修改的区域做修改,再使用pyinstaller xxx.spec命令打包代码。

  3. 使用pyinstaller打包成功之后,产生两个文件夹:

    build文件夹:这是打包过程中临时文件的存放位置。这些文件包括 Python 源代码、打包脚本和其他一些中间文件。在成功打包应用程序后,该目录可以被安全地删除。

    dist文件夹:这是最终生成的可执行文件及其依赖项的存放位置。

▍方式一:命令行直接打包

使用命令行打包通常适用于简单的项目,不需要复杂的配置或自定义设置,也无需频繁重复打包的情况;假设我们的python代码如下,文件名为demo.py。

#demo.py
import os
path=os.getcwd()
print(f'当前文件路径:{path}')
os.system('pause')

打包步骤:

1. 在cmd终端中进入demo.py文件的所在目录。
2. 终端执行:pyinstaller -F demo.py

指令解释:

pyinstaller
[-F/-D]       # [产生当个可执行文件/产生一个目录(包含多个文件)作为可执行文件]
[-w/-c]       # [去掉命令行弹窗/显示命令行弹窗]
-i icon.ico   # 指定exe显示图标
demo.py     #打包的python文件

结果:

打包完成后在demo.py文件所在目录下生成build和dist两个文件夹,dist目录下的demo.exe即为我们打包后的可执行文件。点击demo.exe文件弹出小黑窗即为打包成功。

python代码打包成可执行文件(exe)

▍方式二:使用spec打包

spec文件打包适用于更大规模、更复杂的项目,以及需要自定义配置和频繁重复打包的时候使用;需要使用 .spec 文件进行打包的情况有:

  1. 有数据文件需要一起打包

  2. 把动态链接库一起打包

  3. 添加运行时选项

  4. 想要生成多个可执行程序,公共的模块分割出来给其他调用

假设我们的项目文件结构如下图所示。

PackingExe
|_ core
    |_ __init__.py
    |_ dict.txt
  |_ demo.py

demo.py文件

def resource_path(relative_path):
    """ 运行exe时获取资源文件的绝对路径"""
    base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
    return os.path.join(base_path, relative_path)

def main():
    print(f'当前文件路径:{os.getcwd()}')
    abs_path = resource_path('core/dict.txt')
    with open(abs_path, 'r', encoding='utf-8') as file:
        content = file.readline()
        print(content)
    os.system('pause')

if __name__ == "__main__":
    main()

此处解释一下资源路径函数(resource_path);当exe在运行时,会生成一个临时文件夹,除代码之外的数据资源需要通过sys._MEIPASS访问临时文件夹获取。

打包步骤:

1. 在终端中进入PackingExe目录。
2. 生成spec文件:pyi-makespec -F demo.py    # 生成apec文件,支持-F,--key等参数,不支持--upx-dir
3. 修改spec文件
4. 执行打包命令:pyinstaller demo.spec   # 使用spec文件打包,不支持外部参数

如何正确编辑spec文件?

spec文件主要包含四个类:

  • Analysis类:用于分析 Python 模块之间的依赖关系,并对需要的东西进行打包。

  • PYZ类:是一个由多个Python文件组成的二进制文件。PYZ文件内部包含整个程序的代码和标准库,以及在脚本代码中使用的所有第三方库。

  • EXE类:指定要生成的可执行文件的相关信息,例如名称、平台、图标等。

  • COLLECT类:用于收集所有需要包含在可执行文件中的文件,并将其复制到构建目录中以供打包和部署使用。在-F模式下,是没有COLLECT类。

python代码打包成可执行文件(exe)

用于打包PackingExe项目的spec文件如下:

# -*- mode: python ; coding: utf-8 -*-


block_cipher = None


a = Analysis(
    ['demo.py'],
    pathex=[],
    binaries=[],
    datas=[('core\dict.txt', 'core')],
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=block_cipher,
    noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.zipfiles,
    a.datas,
    [],
    name='demo',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=True,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
)

结果:

打包完成后在demo.py文件所在目录下生成build和dist两个文件夹,dist目录下的demo.exe即为我们打包后的可执行文件。点击demo.exe文件弹出小黑窗即为打包成功。

python代码打包成可执行文件(exe)

▍可能打包失败的原因

  • 程序有bug时,打包后的exe会出现闪退,而不是在小黑窗上报错;

  • 用于打包的python解释器路径不能有中文或空格;如果必须有可以修改python安装目录下的scripts/pyinstaller-script.py文件中的python.exe路径;

  • 最好在py文件首行添加# -*- coding:utf-8 -*-,否则exe容易编码错误;

相关代码资料已经打包好,领取方式看下方

除上述资料外,还附赠全套Python学习资料,包含面试题、简历资料等具体看下方。

 

 全网最全《Python学习资料》免费赠送!

最近火热ChatGPT 等人工智能应用对 Python 编程语言产生了积极的影响,它推动了 Python 的普及和发展,在文本处理和 NLP 领域提升了 Python 的地位,促进了 Python 生态系统的成长

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

python代码打包成可执行文件(exe)
一、Python学习路线

python代码打包成可执行文件(exe)

python代码打包成可执行文件(exe)

二、Python基础学习
1. 开发工具

python代码打包成可执行文件(exe)

2. 学习笔记

python代码打包成可执行文件(exe)

3. 学习视频

python代码打包成可执行文件(exe)

三、Python小白必备手册

python代码打包成可执行文件(exe)

四、数据分析全套资源

python代码打包成可执行文件(exe)

五、Python面试集锦
1. 面试资料

python代码打包成可执行文件(exe)

python代码打包成可执行文件(exe)

2. 简历模板

python代码打包成可执行文件(exe)

到此这篇关于python代码打包成可执行文件(exe)的文章就介绍到这了,更多相关内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文地址:https://blog.csdn.net/2301_76161259/article/details/131261206

延伸 · 阅读

精彩推荐
  • Pythonpython中adb有什么功能

    python中adb有什么功能

    在本篇文章里小编给大家分享的是关于python中adb有功能的知识点总结,有需要的可以跟着学习下。 ...

    yang4862020-06-08
  • Pythonwindows系统IIS部署Django项目的实践

    windows系统IIS部署Django项目的实践

    采用IIS服务器部署相比django提供的开发者服务器具有更好的并发访问能力,性能更加稳定,本文主要介绍了windows系统IIS部署Django项目的实践,具有一定的参...

    ZHY_ERIC11202022-10-31
  • PythonPython机器学习之决策树

    Python机器学习之决策树

    这篇文章主要介绍了Python机器学习之决策树,文中有非常详细的代码示例,对正在学习python的小伙伴们有非常好的帮助,需要的朋友可以参考下...

    WILLPOWER-9842021-10-24
  • Pythondjango上传文件的三种方式

    django上传文件的三种方式

    本章将介绍Django上传处理文件中需要考虑的重要事项,并提供通过自定义表单和ModelForm上传文件的示范代码(附GitHub地址)。如果你的项目中需要用到文件上...

    大江狗5972021-10-22
  • Pythonpython七种方法判断字符串是否包含子串

    python七种方法判断字符串是否包含子串

    这篇文章主要介绍了python七种方法判断字符串是否包含子串,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下...

    写代码的明哥4622020-08-18
  • Pythonpython 读取.csv文件数据到数组(矩阵)的实例讲解

    python 读取.csv文件数据到数组(矩阵)的实例讲解

    今天小编就为大家分享一篇python 读取.csv文件数据到数组(矩阵)的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    yanyanyufei9631922021-03-05
  • Pythonpython制作websocket服务器实例分享

    python制作websocket服务器实例分享

    websocket是一个浏览器和服务器通信的新的协议,websocket则和一般的socket一样,使得浏览器和服务器建立了一个双工的通道。今天我们就来详细探讨下使用...

    宅在壳里的蜗牛10302020-09-12
  • Pythonpython基础之文件处理知识总结

    python基础之文件处理知识总结

    今天带大家了解python文件处理的相关知识,文中介绍的非常详细,对正在学习python的小伙伴们很有帮助,需要的朋友可以参考下...

    wangdd_19932610162021-11-11