pycharm python 程序打包相关

news2024/12/23 23:13:59

前言

终于入门了python打包这个大话题,将目前学到的技能分享一下。


pycharm启动虚拟环境pipenv 缩小打包

和很多博客说的一样,打包那么大是因为打包了多余的库,因此想要缩小就需要一个干净的,没有多余的库的环境进行打包。也就是虚拟环境。
想要在 pycharm 启动虚拟环境,先要安装一个 pipenv。按下 win+r 后输入 cmd 打开命令面板,输入 pip install pipenv 即可安装。

安装后,我们需要得到名为 “pipenv.exe” 文件的路径,也就是 pipenv 虚拟环境的安装路径。查看的方法有很多,或许是能力原因本人试过的都不怎么好使,还是最朴素的方法最稳定:

在这里插入图片描述
是的,直接点开此电脑在右上角搜索文件即可(慢是慢了点但是亲测有效)!
然后我们打开 pycharm 选择新建项目

在这里插入图片描述

点击三角形符号, pycharm 就会为这个项目创建一个干净的虚拟环境。

在这里插入图片描述

然后选择好虚拟环境的类型,也就是上面安装的 pipenv。
如果pipenv可执行文件那一栏是空着的,那么就把上一步中得到的 “pipenv.exe” 的路径复制过去即可。
一切就绪,点击创建。

至此如果都成功,那么恭喜你得到了一个干净的python编程环境,在这个环境下打包是最小的。但是具体实现还有一些细节。

点击左下方栏目中的 python 软件包,那么将会显示在当前环境下安装的所有的库
在这里插入图片描述
可以发现非常的干净,只有三个库。但是这么点库是无法达成项目需求的,因此我们需要添加软件包到当前环境上。
在这里插入图片描述
这一步很重要,切记不要在本地的cmd pip install 安装第三方库后,直接在虚拟环境中使用,这样子库内还是会附带很多多余的东西,就丧失了使用虚拟环境的意义。

那么怎样在 pycharm 提供的虚拟环境下安装呢。

依旧是下方栏目,选择“终端”

在这里插入图片描述
然后就会出现一个类似cmd的控制台。或许这时候你就会迫不及待的在这里 pip install 各种各样的库,但是请注意,左上方这里显示了“本地”,这是本地的 cmd,并不是我们虚拟环境的。
在这里插入图片描述

那么怎么打开虚拟环境的 cmd 进行安装呢,操作步骤非常简单。
点击“本地”旁边的向下箭头,选择 “command prompt” ,然后就切换到了虚拟环境提供的 cmd 了。
在这里插入图片描述
在这里插入图片描述
我们最终在这个地方 pip install Pyinstaller 以及其他各种的库,然后在这里输入 Pyinstaller 命令打包即可。

这个方法打包后效果非常显著,本人一个用本地 cmd 打包 300M 的项目用了虚拟环境后只有 10M。


Pyinstaller 将资源与程序一同打包

相信大家编写的程序都经常需要调用存在本地的各种图片啊字体什么的对吧。但是直接 Pyinstaller 却不能将这些资源一起打包进 exe 文件里。也就是说,如果打包后的程序按照程序中的对应路径中找不到资源,那么就会报错。
那不行啊,如果我们的程序不是在本机运行,那么难不成我们还要把资源一起和exe到处移动,多难看啊?于是就想,如何将资源一起打包进一个exe中呢。

首先,直接 Pyinstaller 打包,项目目录下会新增两个文件夹:dist、build。把这两个都删了。
是的,把这次打包出来的exe也删了。

Pyinstaller 打包后还会产生一个文件 XXX.spec,文件名就是打包的程序名。
这个 spec 文件中包含着打包的所有信息。他也许长这样:

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


block_cipher = None


a = Analysis(
    ['XXX.py'],
    pathex=[],
    binaries=[],
    datas=[],
    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='XXX',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=False,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
    icon=['XXX.ico'],
)

我们打包的信息里面应有尽有,最上面的['XXX.py'],是打包的程序名,最下面的 icon=['XXX.ico'],
是我们打包exe的图标。
既然我们在 Pyinstaller 时输入的信息里面都有,那么就可以利用这个文件,使我们的资源也加入打包队列。

binaries=[],就是用于打包资源的。
可以看到它默认是空的,如果我们要打包资源,就往里面增加元素即可。具体格式的话是一个二元组(url1,url2)

  • url1 是用字符串表示的要打包的资源的相对路径
  • url2 是用字符串表示的运行exe后要把资源解压到的文件夹的相对路径。如果想解压到根目录,那么url2就是 ‘.’(注意有点号)

例如我要将 logo.png 和 air_mitalic.ttf 一起打包进 exe 。其中,logo.png 和 air_mitalic.ttf 存放在项目的根目录,打包解压后我想把他们再次放到根目录,那么 spec 文件应该修改为

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


block_cipher = None


a = Analysis(
    ['function_vision.py'],
    pathex=[],
    binaries=[('air_mitalic.ttf','.'),('logo.png','.')],
    datas=[],
    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='function_vision',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=False,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
    icon=['logo.ico'],
)

修改好 spec 文件后,我们直接打包 spec 文件。在 cmd 中输入 Pyinstaller XXX.spec 即可。注意不要加 -F-D 和其他打包 .py 文件时的命令。

打包完之后仍然会出现一个存放在 dist 文件夹中的exe文件,但是我发现运行他是还是资源路径错误报错。
最终,在这篇博客中找到了解决方法。

Pyinstaller打包用spec添加资源文件,亲测可用

原来是因为打包后的资源解压到了一个奇怪的临时目录下面,因此原程序找不到。
那么我们就修改源程序。怎么改,我们使用前人的经验,在程序中写下一个路径解析函数

def resurce_path(relative_path):
    base_path=getattr(sys,'_MEIPASS',path.dirname(path.abspath(__file__)))  
    return path.join(base_path,relative_path)

每当在代码中需要调用资源的时候加上一个路径解析即可。

logo=pygame.image.load(resurce_path("logo.png"))

这样子,我们就可成功得到资源解压后所在的路径。

这个方法同样来自 Pyinstaller打包用spec添加资源文件,亲测可用,这里仅为引用。

亲测打包后的exe可以得到资源,这样子打包就免去了网上的一些 base64 转码法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/157800.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文读懂内容生态驱动的“菌落式”增长

健康的内容生态对文娱行业极为重要。本文详细介绍了用内容生态建设驱动用户“菌落式”增长的路径。点击文末“阅读原文”立即观看完整直播回放,并下载演讲文档。内容生态与用户增长内容生态建设与用户增长互为因果。一方面,出圈的内容直接带来用户增长。…

《2022大数据产业年度创新服务企业》榜重磅发布丨金猿奖

‍年度金猿榜单/奖项本届“数据猿年度金猿策划活动——2021大数据产业创新服务企业榜单/奖项”由金猿&数据猿&上海大数据联盟共同推出。‍数据智能产业创新服务媒体——聚焦数智 改变商业2022年下半年度,由数据猿、金猿组委会共同推出的第五届 “年度金猿季…

通过usb利用adb实现android手机和pc机通信

1、 adb forward 原理概述 adb forward 的功能是建立一个转发 如:adb forward tcp:8000 tcp:9000 的意思是,将PC端的 8000 端口收到的数据,转发给手机中的 9000 端口。 但是光执行这个命令还不能转发数据,还需要完成下面两个步骤才…

【主色提取】HSV 颜色空间与 RGB 颜色空间互相转化的公式和代码

系列文章目录 第二章 主色提取之颜色空间转化 目录 系列文章目录 文章目录 前言 一、HSV 和 RGB 颜色空间 二、颜色转化 1. RGB to HSV 2. HSV to RGB 三、 完整代码 前言 HSV 颜色空间和 RGB 颜色空间的转化。 一、HSV 和 RGB 颜色空间 RGB颜色使用的最多&#xff0…

C语言详解【通讯录的实现】

前言: 在之前的学习中我们已经了解了结构体的一些知识,有了之前的知识的储备,在这里我们就可以尝试通讯录的实现。 目录问题描述基本流程前期的准备工作实现过程第一阶段第二阶段第三阶段1.增加联系人2.删除联系人3.打印通讯录4.查找指定联系…

高等数学(第七版)同济大学 习题11-7 个人解答

高等数学(第七版)同济大学 习题11-7 函数作图软件:Mathematica 1.试对曲面Σ:zx2y2,x2y2≤1,Py2,Qx,Rz2验证斯托克斯公式.\begin{aligned}&1. \ 试对曲面\Sigma:zx^…

yolov5+车道线检测

目标检测与车道线检测在自动驾驶以及车辆定位中起着重要的辅助作用,是环境感知中不可缺少的一个部分。基于深度学习的车道线检测方法近年来也在不断的提升,比如论文:Ultra Fast Deep Lane Detection with HybridAnchor Driven Ordinal Classi…

Allegro如何Wavie DRC操作指导

Allegro如何Wavie DRC操作指导 在做PCB设计的时候,会因为规则设置的原因,导致出现很多DRC,不方便检查,Allegro支持直接Waive掉正常DRC,方便检查,如下图 芯片中心需要打过孔方便散热,但是这些过孔的DRC是不需要显示的 具体操作如下 选择Display选择 Waive DRCs

数据结构与算法3—栈

1. 栈的定义 栈,也叫堆栈,是最常用也是最重要的数据结构之一。栈(Stack)是限定仅在表的一端进行插入或删除操作的线性表,通常称插入、删除的这一端为栈顶(Top),另一端为栈底(Bottom)。当表中没有元素时称为空栈。栈操作的特点&am…

【服务器数据恢复】StorNext文件系统数据恢复案例

服务器数据恢复环境: 昆腾系列存储,9个磁盘柜,每个磁盘柜配置24块硬盘。其中8个磁盘柜用于存储数据,1个磁盘柜用于存储元数据。上层使用的是StorNext文件系统。 存储元数据的磁盘柜中24块磁盘的分配情况:8组RAID1阵列1…

1361. 验证二叉树

目录题目思路代码题目 二叉树上有 n 个节点,按从 0 到 n - 1 编号,其中节点 i 的两个子节点分别是 leftChild[i] 和 rightChild[i]。 只有 所有 节点能够形成且 只 形成 一颗 有效的二叉树时,返回 true;否则返回 false。 如果节点…

开发小程序遇到的问题

1、小程序授权定位时报错 原因: 需要授权 scope.userLocation、scope.userLocationBackground 时必须配置地理位置用途说明。 解决: 在app.json中,根据开发文档的提示,将下面的代码添加在与pages同级下 "permission": {…

16年经验的通信行业测试人,后悔入错行了吗?

屏幕前的读者对于一个行业的兴衰有什么看法呢?非常很现实的说,我们所处的行业直接关系着每个人的收入,处于行业的不同生命周期内,我们拿到的钱也会不一样。下面用本人所处的行业举个例子。工作经历初入通信行业从我进入通信行业的…

什么是SPI?SPI的优点有哪些?

1、什么是SPI? SPI是串行外设接口(Serial Peripheral Interface)的缩写,是Motorola公司推出的一种同步串行接口技术,是一种高速、全双工、同步的通信总线。 2、SPI优点 支持全双工通信通信简单数据传输速率块 3、缺…

案例分析中可能的考点1:招投标程序

招投标程序: (1)投标方不满足资质要求; (2)投标过程不满足时间要求; (3)招标公告内容或过程不满足要求; (4)评标人员不满足组成要求&a…

【数据结构与算法】二叉树的非递归前中后序遍历

🌠作者:阿亮joy. 🎆专栏:《数据结构与算法要啸着学》 🎇座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录👉…

WebSphere8 批量安装和制作介质服务器

WAS 8.5 介质准备 1、安装install manager 2、安装IBM Packaging Utility unzip pu.offering.disk.linux_1.5.3000.20120531_2025.zip cd disk_linux/InstallerImage_linux ./consoleinst.sh 跟着向导安装。 3、安装PU mkdir pu cd pu unzip ../pu_1.5.3.zip ./imcl i…

如何使用集成在 SharePoint 中的开源 ONLYOFFICE 文档替代微软 Office

ONLYOFFICE 文档是一款开源的办公套件,在 GNU AGPL v3.0 下分发。它包括基于网络的查看器和协作编辑器,可用于处理文本文档、电子表格和演示文稿,与 OOXML 格式高度兼容。 ONLYOFFICE 文档可以与多种云服务集成,如 Nextcloud、ow…

仅CPU服务器pytorch ,torch_geometric安装配置

写在开头,做了整整三年的多组学数据分析,各种模式动物、组织、细胞系的各种组学数据,该怎么串联成我的论文?就是我要开启深度学习小白模式了。 万种流程先从环境配置开始,先说说环境,其实当家的有多GPU超大…

儿童护眼灯哪个好?四款儿童护眼台灯测评

儿童护眼灯在孩子的学习过程中起到了很重要的作用,53.7%的青少年们都有近视的现象,而好的台灯不仅照明非常柔和,而且对眼睛没有刺激和伤害,护眼灯相比传统电灯,一是古县更加明亮且可以调节,二是有护眼技术的…