IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 关于使用pyinstaller打包基于python的工程 -> 正文阅读

[Python知识库]关于使用pyinstaller打包基于python的工程

python工程可采用pyinstaller进行打包,需提前安装pyinstaller模块,安装方法就是(installer模块好像也需要安装这个不确定)

python -m pip install pyinstaller

打包方法一:

先cd到需要打包的工程内部(工程主文件所在的文件夹地址),然后执行打包命令pyinstaller -选项 xxx.py
选项详解:
-D 与 -F 相反用法(默认是此模式),生成一个文件目录包含可执行文件和相关动态链接库和资源文件等,对于打包结果较大的项目,选用-D生成目录相比-F的打包方式,执行速度更快,但包含更加多的文件
-F 表示在 dist 文件夹下只生成单个可执行文件(内部包含所有依赖),不加默认会在 dist 生成一大堆依赖文件+可执行文件。
-w 表示去掉控制台窗口,如果你的程序是有界面的,可以不写这个参数,
-c 表示去掉窗框,使用控制台,推荐使用,会打印各种信息和log到控制台,加上这个参数生成的spec中的console=True
-p 表示自己定义需要加载的类路径,项目中包含多个自建模块的时候需要加上 -p aaa.py -p bbb.py -p ccc.py
-i 表示可执行文件的图标,后面跟图标的路径,可以自定义exe文件的图标,我尝试了好多次没成功
  打包完毕后在 dist 文件夹下双击项目启动文件就可以执行了
其他选项参考此博客

# cd D:\dev_test_project
# D:\dev_tools\dev\python\Python37\Scripts\pyinstaller.exe test_main.py

此时整个内部分为两步
1.先生成默认的xxx.spec文件
2.直接根据默认的main.spec文件进行执行pyinstaller -D xxx.spec完成默认的打包

方法二, 推荐编辑使用.spec文件进行打包

此方法推荐,因为当工程中有一些资源文件或者其他非python文件时,编辑.spec文件执行打包比较方便,
如果你没有.spec文件的话则可以随便找个工程或者py文件现场生成一个.spec文件,然后编辑他,之后执行即可打包
如下面例子

# cd D:\dev_test_project
# D:\dev_tools\dev\python\Python37\Scripts\pyinstaller.exe test_main.py

则在D:\dev_test_project下面会生成.spec文件对她编辑即可

.spec的格式和编辑方法

spec文件是一个python脚本,其默认的结构如下:

spec文件中主要包含4个class: Analysis, PYZ, EXE和COLLECT.
Analysis以py文件为输入,它会分析py文件的依赖模块,并生成相应的信息,修改的主要是这个部分
PYZ是一个.pyz的压缩包,包含程序运行需要的所有依赖,一般不需要修改
EXE根据上面两项生成,里面包含图标、版本(如果命令有会自动生成,命令没传也可以手动修改),可以设置生成的exe的名字
COLLECT生成其他部分的输出文件夹,COLLECT也可以没有,一般不需要更改,可以设置生成的项目文件夹名称

.spec文件样例

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

# 本质是Py文件所有有些包可以在这个里面导出
import sys
import os
sys.setrecursionlimit(5000)

block_cipher = None
project_dir_path = os.path.abspath(os.curdir)

a = Analysis(
             # 项目主程序的地址(可以绝对路径也可以相对路径,取决于.spec文件执行的地址)
             ['weihang_test_py.py'],
             # pathex定义了打包的主目录路径,对于在此目录下的py文件可以只写文件名不写路径
             pathex=[project_dir_path],
             binaries=[],
             # 列表包元组格式,元组的第一个元素为打包之前的资源文件地址,第二个元素为打包之后的资源文件地址(自己指定)
             datas=[(project_dir_path + "lib\\img_file", "lib\\img_file"), (project_dir_path + "lib2\\img_file2", "lib2\\img_file2")],
             # 如果在打包之后执行时报no module named xxxx,而打包机器中有安装此模块,则可以试试将这些模块写到hiddenimports中
             hiddenimports=["pandas", "pandas._libs", "xxxxx", "xxxxx"],
             hookspath=[],
             hooksconfig={},
             runtime_hooks=[],
             # 不打包哪些模块
             excludes=["need_not_model1", "need_not_model2"],
             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, 
          [],
          exclude_binaries=True,
          # 打包的exe名字
          name='weihang_test_py',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=True,
          disable_windowed_traceback=False,
          target_arch=None,
          codesign_identity=None,
          entitlements_file=None )
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas, 
               strip=False,
               upx=True,
               upx_exclude=[],
               # 打包的工程名字
               name='weihang_test_py')

修改后在命令行执行即可打包,打包的工程在dist目录中生成

pyinstaller test_project_main.spec

详细情况也可参照此博客

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 12:06:36  更:2022-04-04 12:06:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 21:01:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码