Python 文件打包- pyinstaller 生产exe

2024-08-23 13:48

本文主要是介绍Python 文件打包- pyinstaller 生产exe,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

pyinstaller打包工具的使用说明

打包命令

pyinstaller可以将python代码打包为可执行的exe文件,一般应用只需要使用如下命令:

  1. C:\Python27\python.exe C:\pyinstaller-2.0\pyinstaller.py src\wgClient.py


执行该命令后将在当前目录下生成build和dist文件夹,另外还会生成一个wgClient.spec文件,用于描述pyinstall的打包过程,如果对打包有特殊要求时,可以直接编辑spec文件,然后将spec文件作为打包时的输入对象:

  1. C:\Python27\python.exe C:\pyinstaller-2.0\pyinstaller.py wgClient.spec


spec文件


下面附上一段spec文件的示例代码,结合示例说明一些打包过程中的一些特殊要求:

  1. -*- mode: python -*-
  2.     a = Analysis(['src\\wgClient.py'],
  3.      pathex=['D:\\PycharmProjects\\wgClientPy'],
  4.      hiddenimports=[],
  5.      hookspath=None)
  6.     pyz = PYZ(a.pure)
  7.     exe = EXE(pyz,
  8.      a.scripts,
  9.      a.binaries,
  10.      a.zipfiles,
  11.      a.datas,
  12.      [('logging.conf', 'src/logging.conf', 'DATA')],
  13.      [('clr.pyd', 'C:\\Python27\DLLs\\clr.pyd', 'EXTENSION'),
  14.      ('Python.Runtime.dll', 'C:\\Python27\DLLs\\Python.Runtime.dll', 'BINARY'),
  15.      ('Python.Runtime.pdb', 'C:\\Python27\DLLs\\Python.Runtime.pdb', 'BINARY'),
  16.      ('n3kAdrtB.dll', 'src\\n3kAdrtB.dll', 'BINARY') ],
  17.      name=os.path.join('build\\pyi.win32\\wgClient', 'wgClient.exe'),
  18.      debug=False,
  19.      strip=None,
  20.      upx=True,
  21.      console=True )
  22.     coll = COLLECT(exe,
  23.      [('config.ini', 'src/config.ini', 'DATA')],
  24.      strip=None,
  25.      upx=True,
  26.      name='dist')


上面的Analysis、PYZ、EXE、COLLECT都是事先定义的子任务。


Analysis

用于定义python源文件,包括搜索路径,源文件名称等。Analysis有5个输出项,可供其他子任务引用:

  • scripts:在Analysis中定义的源文件
  • pure:python模块
  • binaries:动态库
  • datas:数据文件,可以是任意文件类型,例如ini配置文件、字体文件、图片等
  • zipfiles:zip格式的依赖文件,一般是egg格式的库文件
PYZ

将python文件压缩打包,输入一般是Analysis.pure.

EXE

打包生成exe文件,从上面的例子中可以看出,EXE子任务包含了Analysis的所有5个输出项(pure被PYZ打包了),另外还包含程序运行所需的一些配置文件和动态库,这些不在Analysis输出项中的文件是通过TOC格式来配置的,TOC(Table Of Contents),TPC其实就是一个tuple,格式为(name, path, typecode),其中typecode可以为以下值:

  • EXTENSION:python的扩展库
  • PYSOURCE:python脚本
  • PYMODULE:A pure Python module (including __init__modules).
  • PYZ:A .pyz archive (archive_rt.ZlibArchive)
  • PKG:A pkg archive (carchive4.CArchive)
  • BINARY:动态库
  • DATA:数据文件
  • OPTION:A runtime runtime option (frozen into theexecutable).
COLLECT

用来构建最终的生成目录,可以复制其他子任务生成的结果,并拷贝到指定目录,形成最终的打包结果。

示例中的spec文件,会在dist目录下生成一个wgClient.exe的可以执行文件,里面包含所有的依赖项,可以独立运行,同时该目录下还有config.ini配置文件。

文件路径

上例中,将logging.conf文件直接打包在exe内部了,python在读取时应使用以下方式读取文件路径:

  1. if getattr(sys, 'frozen', None):
  2.      basedir = sys._MEIPASS
  3. else:
  4.      basedir = os.path.dirname(__file__)
  5. logging.config.fileConfig(os.path.join(basedir, 'logging.conf'))


扩展名

在写Python程序时我们常见的扩展名是py, pyc,其实还有其他几种扩展名。下面是几种扩展名的用法。

py

py就是最基本的源码扩展名。windows下直接双击运行会调用python.exe执行。

pyw

pyw是另一种源码扩展名,跟py唯一的区别是在windows下双击pyw扩展名的源码会调用pythonw.exe执行源码,这种执行方式不会有命令行窗口。主要用于GUI程序发布时不需要看到控制台信息的情况。

pyc

在执行python代码时经常会看到同目录下自动生成同名的pyc文件。这是python源码编译后的字节码,一般会在代码执行时自动生成你代码中引用的py文件的pyc文件。这个文件可以直接执行,用文本编辑器打开也看不到源码。

pyo

pyo是跟pyc类似的优化编码后的文件。

pyd

pyd并非从python程序生成,而是其他语言写成的可以被python调用的扩展。

程序发布的选择

由于笔者基本只在windows平台下考虑发布问题,其他平台均使用源码,故此处讨论基本围绕windows平台。

打包为正常exe程序

如果要公开发布程序,最常见的方式就是打包成exe程序了。打包的好处是使用者不需要考虑Python的运行环境,且也容易被接受。但不好的是一般打包出来的程序都比较大,而且由于是依靠模块打包,有可能出现兼容性等问题。

笔者常用的打包模块是pyinstaller。常用的打包命令是:

pyinstaller -F example.py

-F参数可将代码打包成单个exe程序。

另外如果是GUI程序不需要控制台窗口的还可以加上-w参数:

pyinstaller -w -F example.py

发布编译后的pyc/pyo

如果使用者有python环境,又不想让他们看到源码,就可以选择发布pyc/pyo文件。

直接执行的py文件不会自动生成pyc,需要手动编译一下。单文件编译:

import py_compile
py_compile.compile(r'c:\test.py')
  • 1
  • 2
  • 1
  • 2

文件夹编译:

import compileall
compileall.compile_dir(dirpath)
  • 1
  • 2
  • 1
  • 2

编译成pyo:

python -O -m py_compile file.py

如果是GUI程序不需要控制台窗口,可以新建一个pyw文件用于调用主pyc程序。pyw中只需要导入pyc程序即可。

发布源码py

发布源码一般是开源项目使用的,没什么需要说明的。直接发py文件就可以了,只要对方有环境就可以运行。

参考资料:

  1. 《python 文件 .py .pyc .pyw .pyo .pyd》http://blog.csdn.net/feeltouch/article/details/45952003
  2. 《Python程序的执行原理》http://tech.uc.cn/?p=1932
  3. 《python的pyc和pyo文件》http://gmingzhe.blog.51cto.com/810664/163444
  4. 《运行Python程序(pyc)隐藏DOS窗口的简便方法》https://apfantasy.wordpress.com/2011/02/13/%E8%BF%90%E8%A1%8Cpython%E7%A8%8B%E5%BA%8Fpyc%E9%9A%90%E8%97%8Fdos%E7%AA%97%E5%8F%A3%E7%9A%84%E7%AE%80%E4%BE%BF%E6%96%B9%E6%B3%95/
  5. 《py文件编译为pyc》http://blog.csdn.net/sislcb/article/details/4002414

URL: https://blog.csdn.net/u010159842/article/details/53212443

这篇关于Python 文件打包- pyinstaller 生产exe的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1099553

相关文章

Python FastMCP构建MCP服务端与客户端的详细步骤

《PythonFastMCP构建MCP服务端与客户端的详细步骤》MCP(Multi-ClientProtocol)是一种用于构建可扩展服务的通信协议框架,本文将使用FastMCP搭建一个支持St... 目录简介环境准备服务端实现(server.py)客户端实现(client.py)运行效果扩展方向常见问题结

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2

python获取cmd环境变量值的实现代码

《python获取cmd环境变量值的实现代码》:本文主要介绍在Python中获取命令行(cmd)环境变量的值,可以使用标准库中的os模块,需要的朋友可以参考下... 前言全局说明在执行py过程中,总要使用到系统环境变量一、说明1.1 环境:Windows 11 家庭版 24H2 26100.4061

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

Python数据分析与可视化的全面指南(从数据清洗到图表呈现)

《Python数据分析与可视化的全面指南(从数据清洗到图表呈现)》Python是数据分析与可视化领域中最受欢迎的编程语言之一,凭借其丰富的库和工具,Python能够帮助我们快速处理、分析数据并生成高质... 目录一、数据采集与初步探索二、数据清洗的七种武器1. 缺失值处理策略2. 异常值检测与修正3. 数据

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与

Python使用Tkinter打造一个完整的桌面应用

《Python使用Tkinter打造一个完整的桌面应用》在Python生态中,Tkinter就像一把瑞士军刀,它没有花哨的特效,却能快速搭建出实用的图形界面,作为Python自带的标准库,无需安装即可... 目录一、界面搭建:像搭积木一样组合控件二、菜单系统:给应用装上“控制中枢”三、事件驱动:让界面“活”

VSCode设置python SDK路径的实现步骤

《VSCode设置pythonSDK路径的实现步骤》本文主要介绍了VSCode设置pythonSDK路径的实现步骤,包括命令面板切换、settings.json配置、环境变量及虚拟环境处理,具有一定... 目录一、通过命令面板快速切换(推荐方法)二、通过 settings.json 配置(项目级/全局)三、

Python struct.unpack() 用法及常见错误详解

《Pythonstruct.unpack()用法及常见错误详解》struct.unpack()是Python中用于将二进制数据(字节序列)解析为Python数据类型的函数,通常与struct.pa... 目录一、函数语法二、格式字符串详解三、使用示例示例 1:解析整数和浮点数示例 2:解析字符串示例 3:解