前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python|python文件打包实战之进阶篇

Python|python文件打包实战之进阶篇

作者头像
算法与编程之美
发布2020-05-19 16:03:13
5390
发布2020-05-19 16:03:13
举报

1前言

在上周的文章中,小编给大家讲了python gui编程,做了一个有趣的“消息轰炸机”,如果想发给朋友用怎么办呢?所以今天,小编就通过实战来让大家学会用pyinstaller打包带有资源文件的python文件。

2准备

安装pyinstaller就不用说了,前面基础篇也给大家介绍过,直接在命令行运行以下代码即可。

pip install pyinstaller

3配置spec文件

在前面基础篇中,能看到,打包完成后,会在文件夹中产生一个spec文件,它也是一个python脚本文件,这对打包非常重要,里面的代码内容实际就是告诉pyinstaller该如何打包python文件。在基础篇中提到的命令也都可以通过配置spec文件来实现。

首先需要运行以下命令产生spec文件

pyi-makespec -F -w -i 轰炸机.ico 消息轰炸机.py

在产生spec文件时可以直接输入基本的命令。

这时会看到文件夹中出现了spec文件:

图3.1spec文件
图3.1spec文件

然后在自己的编译器中打开这个文件。里面的代码如下:

代码语言:javascript
复制
# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


a = Analysis(['消息轰炸机.py'],
             pathex=['C:\\Users\\八里公路\\Desktop\\新建文件夹'],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             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='消息轰炸机',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=False , icon='轰炸机.ico')

在这里面最重要的就是Analysis这一项,其他的都可以不管。

其中:

pathex代表要打包的python文件所在路径。

binaries代表代码所需动态资源,比如数据库,网页等。

datas代表静态资源,比如图片、字体、音乐等。

hiddenimports代表一些隐藏的模块。

后面的也都不用管了,还有更多了解的可以去pyinstaller的官网查看。今天打包这个“消息轰炸机”只需要配置datas就可以了。从代码可以看出datas是一个列表,里面需要填代码所需资源文件的初始位置和打包后的位置,值得注意的是,里面必须填一个元组。因为这个项目里面所用到的资源都是放在与代码同目录下的resource文件中的,而且也希望它打包后的位置也是在与代码文件同目录下的resource中,保持相对位置不变,所以修改后的datas为:

datas = [(‘resource’,’resource’)]

这样spec文件就算是配置好了。

4相对位置

仅仅是配置spec文件是不够的,还需要在所需打包的代码文件中添加如下代码才行:

代码语言:javascript
复制
import sys,os
def rp(relative_path):
    base_path = getattr(
        sys, '_MEIPASS', os.path.dirname(
            os.path.abspath(__file__)))
    return os.path.join(base_path, relative_path)

这个函数不需要懂,只要知道它的目的是将程序所需资源文件的路径改为相对路径,这样打包后的程序不管在哪运行,它的resource文件始终是与代码文件同目录的。当然最后也不要忘了在代码中引用资源文件时将路径用这个函数转换一下。以后只要打包有资源文件的程序时,都将这个函数添加进去就可以了。

5完成打包

经过以上步骤后,最后再执行以下代码就可以成功将“消息轰炸机”打包成exe可执行文件了。

pyinstaller 消息轰炸机.spec

图5.1打包成功
图5.1打包成功

然后再检验一下是否打包成功,可以将这个exe文件拖到桌面上运行,看是否能完美运行。

图5.2桌面运行exe文件
图5.2桌面运行exe文件
图5.3运行成功
图5.3运行成功

6总结

成功之后记得将你的程序发给你的朋友哦,让他们也能用到你自己编写的程序,这何尝不是一件趣事呢?

相信大家看了此篇文章后,一定能有所收获,如果有地方不明白,那一定是你没有看小编的另一篇文章《python文件打包实战之基础篇》,可以在号内搜索阅读。

最后小编想建议大家,如果在学习编程的时候感觉枯燥了,那么你可以试着去通过编写一些可视化的程序来提示自己的兴趣,同时也可以升编程能力。所以还请大家持续关注,后续小编还会给大家带来有趣的程序。

END

主 编 | 王文星

责 编 | 江来洪

where2go 团队

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与编程之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档