iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python文件打包exe程序
  • 559
分享到

Python文件打包exe程序

pythonwindowslinux开发语言macos 2023-10-21 15:10:52 559人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

文件打包 概要 脚本打包exe:win/Mac【终端】Qt5,开发桌面应用打包qt5程序【桌面应用】 1.exe 打包 pip install pyinstaller 注意事项: 支持mac、win(windows建议使用py

文件打包

概要

  • 脚本打包exe:win/Mac【终端】
  • Qt5,开发桌面应用
  • 打包qt5程序【桌面应用】

1.exe 打包

pip install pyinstaller

注意事项:

  • 支持mac、win(windows建议使用python3.6.8)

  • 配合虚拟环境打包

    Mac系统下:1、在mac系统上先开发(为这个程序创建一个虚拟环境) dream2、开发........(安装各自用到的包)3、开发完毕后pip freeze > reqirements.txt(将不同的包写入到程序中)4、打开Windows虚拟机(专门对程序进行打包)5、创建一个虚拟环境(专门用来写项目用的)6、安装项目依赖 pip install -r reqirements.txt7、安装pyinstallerpyinstaller -F xxxxx产出:dream.exe
    Windows系统下:1、创建虚拟环境+项目  dream2、开发    开发完毕后        pip freeze > reqirements.txt(将不同的包写入到程序中)(可有可无)3、安装pyinstallerpyinstaller -F xxxxx产出: dream.exe#可以不用写pip freeze > reqirements.txt(这步)#原因:利用自己的Windows系统已经存在这个环境文件了。
  • 过程详解:

    • 1、pyinstaller包:帮我们快速打包应用程序!
    • 2、Windows建议使用python3.6.8:对程序打包会发生更少的bug!
    • 3、建议配合虚拟环境打包程序:每一个程序用到的包都是不同的,在不同的虚拟环境下会安装各自的不同的包!
    • 4、pip freeze > reqirements.txt:就是将虚拟环境中安装的所有的第三方包写入到程序中!
    • 5、创建一个虚拟环境:专门用来写项目用的!
    • 6、pip install -r reqirements.txt:把文件中所有写上的包都安装上了!
    • 7、pyinstaller -F xxxxx:产出exe程序命令!

2、开发流程

2.1 创建虚拟环境

2.2 创建成功后

2.3 创建新项目(app.py)

2.4 开发程序文件及安装一些自己想依赖的包

2.5 利用 pip freeze > reqirements.txt 语句查看当前依赖的包有哪些

  • 可以查看到当前安装的包以及包的版本

3、多文件打包

利弊:

  • 缺点:文件夹文件冗杂
  • 优点:运行速度较快

3.1 首先 pip install pyinstaller 安装这个包

  • 安装完成后关闭终端再重启终端,输入 pyinstaller 即可看到关于 pyinstaller 的各种命令

3.2 打包方法

pyinstaller -D 项目名pyinstaller -D app.py
  • 打包成功后即可看到目录结果已经发生了明显变化

  • 文件解读

    • build:中间编译过程中产出的代码(基本没用)

    • dist:打完包后的结果。可以运行的文件(将app文件夹压缩打给其他人解压----->点击app.exe即可运行程序)

    • app.spec:打包过程中生成的配置文件。

3.3 双击运行效果:(输入信息并打印信息)

3.4 注意事项:报错详解

  • 在写代码过程中可能会写错代码导致错误,如果是正常的点击exe文件运行程序,则会进入,运行到错误的时候后马上闪退,并且无法知道报错的类型及原因!

  • 解决办法:

    • 将exe文件拖拽到cmd(命令提示符窗口)运行
  • 明显细节可能出错:输入文本类型会报错

    text = int(input("请输入信息:"))

    • 重新打包程序(将之前打包产生的文件都删除,即build文件夹、dist文件夹、app.spec)

    • 打包完成后按照上述方法

      • 将exe文件拖拽到cmd(命令提示符窗口)运行(或输入文件路径,本质上二者均是输入路径运行程序)
      • 在终端命令行运行代码即可查看到报错原因

4、单文件打包

利弊:

  • 优点:只有一个文件即exe文件
  • 缺点:运行起来需要缓存,可能回慢一些

打包方法

pyinstaller -F 项目名pyinstaller -F app.py

  • 可以很明显的看到打包后的dist文件夹内只有app.exe一个文件(即可执行exe程序文件)

  • 运行效果如刚才所示

5、文件打包之对于exe文件的命名

5.1 打包命名方法

pyinstaller -F 项目名 -n 文件名pyinstaller -F app.py -n 哔哩哔哩pyinstaller -D 项目名 -n 文件名pyinstaller -D app.py -n 哔哩哔哩

5.2 打包完成后即可看到明显变化

  • 运行程序名如我们所命名的变成了哔哩哔哩

6、其他方法参数详解

6.1 参数参考

[-h] [-v] [-D] [-F] [--specpath DIR] [-n NAME] [--add-data ]      [--no-embed-manifest] [-r RESOURCE] [--uac-admin] [--uac-uiaccess][--win-private-assemblies] [--win-no-prefer-redirects] [--argv-emulation][--osx-bundle-identifier BUNDLE_IDENTIFIER] [--target-architecture ARCH][--codesign-identity IDENTITY] [--osx-entitlements-file FILENAME] [--runtime-tmpdir PATH]     [--bootloader-ignore-signals] [--distpath DIR] [--workpath WORKPATH] [-y][--upx-dir UPX_DIR] [-a] [--clean] [--log-level LEVEL]scriptname [scriptname ...]

6.2 参数详解

6.2.1 打包参数详解
参数说明
-F产生单个的可执行文件
-D产生一个目录(包含多个文件)作为可执行程序
-a不包含 Unicode 字符集支持
-ddebug 版本的可执行文件
-w指定程序运行时不显示命令行窗口(仅对 Windows 有效)
-c指定使用命令行窗口运行程序(仅对 Windows 有效)
-o指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件
-p设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,linux 使用冒号)来分隔多个路径
-n指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字
6.2.1 打包带自定义icon(图标)的exe可执行文件
  • 下载icon(图标文件)

    https://www.iconfont.cn/

  • 也可以将图片转化为icon(图标文件)

    https://www.bitbug.net/

  • 用以下命令自定义exe图标

    pyinstaller -F -i icon文件名 程序名pyinstaller -F -i bit.ico app.py

  • 很明显可以看到我们的程序图标已经发生变化

7、运行文件读取其他文件操作详解

7.1. 读取文件路径

import osp1 = os.path.abspath(__file__)  #os模块读取当前文件所在绝对目录print(p1)# E:\Luffycity\exe\bilibili\app.pyp1 = os.path.dirname(os.path.abspath(__file__))  # os模块读取当前文件所在绝对目录的上一级目录print(p1) #E:\Luffycity\exe\bilibili

7.2 添加文件路径

import os#声明根目录BASE_DIR = os.path.dirname(os.path.abspath(__file__))  # os模块读取当前运行文件所在绝对路径的上一级目录print("------欢迎使用dream系统!------")#os.path.join(BASE_DIR,"acount.txt") : 拼接路径 即 把txt文件路径拼接到BASE_DIR路径下面with open(os.path.join(BASE_DIR,"acount.txt"), mode='r', encoding='utf8') as f:    data = f.read().strip()

7.3 特别注意

7.3.1 多文件打包:不会报错

  • 原因是文件都在文件夹内

7.3.2 单文件打包:报错

为什么会报错?#只生成了一个dist文件//多文件打包:在运行程序exe文件时,是会解压所有的文件的,多文件打包时可以读取到每个文件夹的路径及内容//单文件打包:在运行exe程序时,会解压所有的文件到虚拟文件目录,无法读取到写死的文件夹目录

7.3.4 如何解决之分析思路(sys.argv)

  • 创建demo.py文件,将sys.argv函数写进去。

    import sys#sys.argv : 列表内存储的是列表(列表内存的就是当前程序所在的目录)print(sys.argv) # ['E:\\Luffycity\\exe\\bilibili\\demo.py']print(sys.argv[0]) # E:\Luffycity\exe\bilibili\demo.py
  • 将demo.py封装成exe程序

    pyinstaller -F demo.py

  • 在命令行终端运行即可看到文件路径

    • 在exe程序代表可执行程序的文件所在路径

    • ['E:\\Luffycity\\exe\\bilibili\\demo.py']
  • 找到文件所在的绝对路径

    #os.path.relpath : 找到所在文件的绝对路径BASE_DIR = os.path.dirname(os.path.realpath(sys.argv[0]))
7.3.5 如何解决之修改代码
  • 修改BASE_DIR的路径

    import timeimport osimport sys# 声明根目录# BASE_DIR = os.path.dirname(os.path.abspath(__file__))  # os模块读取当前运行文件所在绝对路径的上一级目录#拿到程序所在的根目录BASE_DIR = os.path.dirname(os.path.realpath(sys.argv[0]))print("------欢迎使用dream系统!------")# os.path.join(BASE_DIR,"acount.txt") : 拼接路径 即 把txt文件路径拼接到BASE_DIR路径下面with open(os.path.join(BASE_DIR, "acount.txt"), mode='r', encoding='utf8') as f:    data = f.read().strip()print(data)time.sleep(5)
7.3.6 运行效果及注意事项
  • 重新打包exe文件

    pyinstaller -F app.py -n 哔哩哔哩
  • 注意将想要读取的文件copy到程序所在目录,否则会报错

  • 运行效果 -- 正常读取文件内容

7.3.5 如何解决之分析思路(frozen)

import sysif getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS'):    print('running in a PyInstaller bundle')else:    print('running in a nORMal Python process')
  • 条件选择

    • 如果是程序运行文件

    • 如果是py文件

      if getattr(sys, 'frozen', False):    #executable : 当前执行文件的文件目录    BASE_DIR = os.path.dirname(sys.executable)else:    #文件夹所在目录    BASE_DIR = os.path.dirname(os.path.abspath(__file__))
  • app.py文件

    import timeimport osimport sysif getattr(sys, 'frozen', False):    #executable : 当前执行文件的文件目录    BASE_DIR = os.path.dirname(sys.executable)else:    #文件夹所在目录    BASE_DIR = os.path.dirname(os.path.abspath(__file__))print("------欢迎使用dream系统!------")# os.path.join(BASE_DIR,"acount.txt") : 拼接路径 即 把txt文件路径拼接到BASE_DIR路径下面with open(os.path.join(BASE_DIR, "acount.txt"), mode='r', encoding='utf8') as f:    data = f.read().strip()print(data)time.sleep(5)

8、关于模块

8.1 先创建一个文件夹(里面包含两个包)

  • 定义两个函数文件 db.py和encrypt.py

    • db.py

      • def get_data_base():    return "Mysql"
    • encrypt.py

      • def md5():    return "加密"
  • 在主文件(app.py)中导入这个包并调用这两个函数

  • 打包exe:会发现这两个函数(包)默认帮我打到我依赖的包里面

    • 可以正常运行且会输出内容

8.2 包里面又嵌套了另一个包

  • 定义三个函数文件 db.py、encrypt.py、tree.py

    • db.py

      from . import treedef get_data_base():    print(tree.get_name())    return "mysql"
    • encrypt.py

      def md5():    return "加密"
    • tree.py

      def tree():    return tree
  • 重新打包运行exe程序

  • 正常运行且可以看到从另一个依赖的包导入的函数

  • 总结

  • 当写的内容较少时,导入的模块会默认被添加到默认依赖里面

8.3 如果遇到动态导入模块的代码时,则无法找到关联的包

8.3.1 方法一:常规方法
  • import timeprint("------欢迎使用dream系统!------")# #正常常规写法from utils import cardcard.get_number()time.sleep(5)
8.3.2 方法二:动态导入模块方法
  • import importlib  #动态模块导入依赖包
  • import timeprint("------欢迎使用dream系统!------")#借助模块动态导入方法import importlibcard = importlib.import_module('utils.card')v1 = card.get_number()print(v1)time.sleep(5)
  • 问题:

    • 虽然动态模块导入可以 运行 import importlib 将此依赖包加入到默认依赖中

    • 但是无法 通过 card = importlib.import_module('utils.card') 这行代码,将其中的card函数(包)加入到默认依赖中

8.4 对于动态导入模块中无法找到依赖包的解决办法

  • 程序名.spec(哔哩哔哩.spec):pyinstaller打包时读的配置文件

    • 在 hiddenimports 手动加入需要动态导入的包

      hiddenimports=[        "utils.card",    ],

  • 注意:再次重新打包时

    • 不能使用

      pyinstaller -F app.py -n 哔哩哔哩
      • 原因:利用该语句打包时,会重新创建 哔哩哔哩.spec 配置文件,将改好的配置文件替换成默认的
    • 应该使用

      pyinstaller -F  哔哩哔哩.speC#此语句可能会报这个错#makespec options not valid when a .spec file is given#解决办法:不加 -Fpyinstaller 哔哩哔哩.spec
      • 效果如下:正常启动运行

来源地址:https://blog.csdn.net/Chimengmeng/article/details/129610194

--结束END--

本文标题: Python文件打包exe程序

本文链接: https://www.lsjlt.com/news/433834.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python文件打包exe程序
    文件打包 概要 脚本打包exe:win/mac【终端】qt5,开发桌面应用打包qt5程序【桌面应用】 1.exe 打包 pip install pyinstaller 注意事项: 支持mac、win(Windows建议使用py...
    99+
    2023-10-21
    python windows linux 开发语言 macos
  • 将Python程序打包成exe文件
    我新写了一篇更加完整的文章,与这篇文章相比,它新增了两种打包方式:多python文件打包和含有资源文件的打包方式,具体请戳链接: 用 Pyinstaller 模块将 Python 程序打包成 exe 文件(全网最全面最详细)_小康20...
    99+
    2023-09-05
    python exe pyinstaller
  • Python如何打包exe文件
    这篇文章将为大家详细讲解有关Python如何打包exe文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。首先把你的代码准备好,尽量不要中文路径,容易报错。这个是要用的模块Pyinstaller它不是Pyt...
    99+
    2023-06-25
  • Python程序打包成可执行文件exe详解流程
    今天给大家分享个可视化 Python 打包神器,欢迎点赞支持,文末提供技术交流群。 1、 什么是 auto-py-to-exe auto-py-to-exe 是一个用于将Python...
    99+
    2024-04-02
  • Python项目打包成exe文件
    目录前言环境依赖项目打包总结前言 之前有人私信我,他写了一个在终端交互的小程序,希望可以不在IDE的终端显示,而是独立一个窗口进行交互。其实只要把项目打包成exe执行文件,就可以在执...
    99+
    2024-04-02
  • Python程序打包成可执行文件exe流程是什么
    这篇文章主要讲解了“Python程序打包成可执行文件exe流程是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python程序打包成可执行文件exe流程是什么”吧!1、 什么是 auto...
    99+
    2023-06-25
  • python将写好的程序打包成exe可执行文件
    目录1、安装pyinstaller2、使用pyinstaller 打包程序2.1 开始打包2.2 查收exe文件前言: 首先 如果你的python是64位的编译器,那么打包的结果就只...
    99+
    2024-04-02
  • 怎么将python打包成exe文件
    使用pyinstaller库将python打包成exe文件:1.打开命令提示符窗口;2.使用pip命令安装pyinstaller库;3.使用cd命令切换到python目录;4.使用pyinstaller -F命令打包;具体步骤如下:首先,在...
    99+
    2024-04-02
  • 将Python脚本打包成exe文件
    目录1.安装依赖2.整合资源3.修改脚本并测试4.准备图标(可略过)5.pyinstaller打包6.结论总结相信很多朋友在用Python写完代码之后都迫不及待的想发给对象交流(装X...
    99+
    2024-04-02
  • tkinter打包成exe程序
    需求分析:python脚本如果在没有安装python的机器上不能运行,所以将脚本打包成exe文件,降低脚本对环境的依赖性,同时运行更加迅速准备:pyinstaller 官网:http://www.pyinstaller.org/ ...
    99+
    2023-01-30
    程序 tkinter exe
  • 如何利用pyinstaller打包Python程序为exe可执行文件
    序 对于如何将py文件打包生成exe可执行文件最简单的应该我觉得就是使用pyinstaller第三方模块 下面我就分为三个步骤给大家讲解如何使用 并分享一点小技巧 下面直接进入分享啦...
    99+
    2024-04-02
  • 【Python】项目打包:如何使用PyInstaller打包python程序(exe)
    文章目录 前言一、PyInstaller二、安装PyInstaller库三、PyInstaller的使用1.命令行+参数2.py文件+参数2.1配置文件config.py2.2打包文件pyTe...
    99+
    2023-09-02
    python 开发语言 qt5
  • 【Python打包成exe】快速将多个py文件及其他文件打包为exe可执行文件
    使用概述: 尝试了很多种Python打包为exe可执行文件的方式,通过总结,得出一种最简洁、最有效的打包方式分享给大家! 步骤一(准备好安装文件): 准备好将要打包的工程文件(夹) 如上图所示,首先...
    99+
    2023-09-06
    python pycharm 前端
  • 使用PyInstaller库把Python程序打包成exe
    一、pyinstaller简介 Python是一个脚本语言,被解释器解释执行。它的发布方式: .py文件:对于开源项目或者源码没那么重要的,直接提供源码,需要使用者自行安装Pytho...
    99+
    2024-04-02
  • Python打包exe程序怎么避免出错
    这篇文章主要讲解了“Python打包exe程序怎么避免出错”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python打包exe程序怎么避免出错”吧!写完一个python程序之后,如何才能快速...
    99+
    2023-06-15
  • python多进程程序打包成exe的问题
    粘贴一下部分的多进程代码 if __name__ == '__main__': """"流程模拟""" multiprocessing.freeze_support(...
    99+
    2022-12-25
    将Python程序打包成exe Python打包exe文件方法汇总 实现python整个项目打包成exe
  • PyCharm教程:如何将Python代码打包成EXE文件
    在本文中,我们将介绍PyCharm中的一种常用方法,通过使用PyInstaller将Python代码打包成可执行的EXE文件。PyInstaller是一个用于将Python应用程序转换...
    99+
    2024-02-22
    python pycharm 打包 python程序
  • python代码打包成可执行文件(exe)
    【前言】:我们在开发完一个小项目后,想要把项目发布出来给别人用。通常都会把代码打包成exe后再给别人,而不是让别人去安装运行环境再跑裸代码。本文就是介绍如何使用pyinstaller这个工具将pyth...
    99+
    2023-09-02
    python 开发语言
  • 如何将python文件打包成exe可运行文件
    目前有好几种方法可以将python文件打包成exe应用程序文件,例如py2exe,pyinstaller等,比较下来,还是觉得pyinstaller使用起来比较简单。 首先第一步下载...
    99+
    2023-05-16
    python打包成exe可运行文件 python打包成exe
  • 基于Python实现一个自动关机程序并打包成exe文件
    目录1、实现效果2、实现步骤3、全部代码 Python代码打包exe文件在桌面运行的方式我之前有写,置顶了,也可以参考这里直接阅读:Python打包exe方法 1、实现效果 2、实...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作