pyinstaller 打包时关于加载资源文件

October 4, 2018 · 分享 · python · 683次阅读

今天跟着书写完整了一个小游戏demo,然后想做个单独的exe,不过问题是py文件中加载本地图片但pyinstaller是不打包的。

准确说是要手动添加下才行。

pyinstaller -F -i=my.ico -w yourmain.py

先通过此步生成spec文件,然后做出下面的修改:

# -*- mode: python -*-

block_cipher = None

added_files = [
('images/alien.bmp','.'),
('images/ship.bmp','.')
]

a = Analysis(['alien_invasion.py'],
             pathex=['C:\\xxx\\alien_invasion'],
             binaries=[],
             datas = added_files,
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
extra_tree = Tree('./images', prefix = '.')
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          name='alien_invasion',
          debug=False,
          strip=False,
          upx=True,
          runtime_tmpdir=None,
          console=False )

其中

added_files = [
('images/alien.bmp','.'),
('images/ship.bmp','.')
]

这里是添加资源文件,前面是相对路径,当然也可以写绝对路径,后面是在打包好的程序中的“路径”,一个点即根目录。

datas = added_files

这里就不用多说了,这样写比较直观,你要想合并在一起也是可以的。

extra_tree = Tree('./images', prefix = '.')

这里前者是打包前的资源文件路径,后面的点和上面一致(不是很确定)

在重新打包前,如果代码中有对路径文件的操作,需要通过一个函数确定其在程序包中的“路径”
函数如下(记得import os和sys两个包):

def resource_path(relative_path):
    try:
        base_path = sys._MEIPASS
    except Exception:
        base_path = os.path.abspath(".")

    return os.path.join(base_path, relative_path)

最后再次执行

pyinstaller -F -i=my.ico yourmain.spec

就OK了,这个时候exe就能完整独立运行了

参考链接:
https://loserfer.blogspot.com/2018/04/pyinstaller.html

ENJOY 0

none

最后编辑于3年前

添加新评论

avatar

未末

118

文章数

260

评论数

7

分类

新鲜出炉の评论

获取CSDN学院m3u8解密的key
路人甲
路人甲2021-10-05

请问这个方法失效了么?获取到的是空串

获取CSDN学院m3u8解密的key
DK爱梦游
DK爱梦游2021-09-29

大佬求教,51cto的KEY怎么获取?

XstreamDL-CLI BUG修复记录
poohboy
poohboy2021-09-25

大佬,我想问一下,iqiyi的m3u8是不是没法获取?我只找到了一个dash链接,然后手动下载了里面的m4s,但用nilaoda的那个解密工具解不了,老提示获取kid失败

XstreamDL-CLI BUG修复记录
Andist
Andist2021-09-17

en……实在不好意思,代理我知道怎么启用了。我只勾选了自定义代理,但没有填写proxy参数,我太愚钝了对不起!!!

XstreamDL-CLI BUG修复记录
Andist
Andist2021-09-17

感谢您开发的这款软件,对于第一次下载mpd的小白而言很友好! 这段时间用下来就是有时候下载直连的海外视频流时可能因为网络状况不佳,会有下载不完整的问题,下载完进度没到100%,但是也合并解密了,不知道能否增加下载不完整在最后输出报错信息的功能呢? 以及我想请教一下如何让下载器使用小飞机的代理呢?我尝试在“使用自定义代理”的选项上勾选,但是好像命令行中没有变化? (另外我猜您图中的样本是在下载CP+上的用九柑仔店是吗?我也很喜欢这部剧,是我心目中排名第一的台剧哈哈)