码迷,mamicode.com
首页 > 其他好文 > 详细

pyinstaller打包资源文件及包含eyed3模块时提示找不到libmagic处理

时间:2018-10-31 17:56:04      阅读:437      评论:0      收藏:0      [点我收藏+]

标签:文件名   win   版本   pat   enc   tde   window   false   生成   

这两天用python写了个小工具,用到了eyed3,用pyinstaller打包时提示找不到libmagic

版本信息:
python 3.6.5
pyInstaller 3.4
python-magic-bin 0.4.14
eyeD3 0.88
wxpython 4.0.3
  1. eyeD3 在Windows下使用时,文件名带有中文时乱码,提示找不到文件,解决办法(magic.py 230行左右):
if is_unicode:
    return filename.encode(‘utf-8‘)
else:
    return filename

改为

if is_unicode:
        import locale
        lan, encoding = locale.getdefaultlocale()
        return filename.encode(encoding)
else:
        return filename

2.pyinstall打包包含资源文件方法:

首先生成spec配置文件,要指定的参数-F ,-w等,这里就要添加
:pyi-makespec  [options] myscript.py
然后编辑 myscript.spec --> datas 标签,格式:
datas=[(‘res/my.ico‘,‘res‘),(‘文件路径‘,‘存放路径‘)]
最后:
:pyinstaller myscript.spec
在使用时,引用文件路径方法:
if getattr(sys, ‘frozen‘, False):
    respath = os.path.join(sys._MEIPASS, ‘res‘)
myicopath = os.path.join(respath,‘my.ico‘)

注:sys._MEIPASS是pyinstaller打包exe后程序的运行时路径
  1. pyinstall 打包包含eyeD3模块时提示 找不到libmagic
首先将libmagic打包到exe文件内
datas=[(‘C:/Users/xxxx/Python/Lib/site-packages/magic/libmagic‘,‘libmagic‘),(其他资源)],
然后修改 magic.py,大约155行:
bin_dist_path = os.path.join(os.path.dirname(__file__), ‘libmagic‘)
修改为:
if getattr(sys, ‘frozen‘, False):
    bin_dist_path = os.path.join(sys._MEIPASS, ‘libmagic‘)
else:
    bin_dist_path = os.path.join(os.path.dirname(__file__), ‘libmagic‘)
如果担心修改这个文件影响其他项目使用,可以先拷贝一份magic.py到项目根目录
然后再修改,打包时会优先使用项目下的magic.py

pyinstaller打包资源文件及包含eyed3模块时提示找不到libmagic处理

标签:文件名   win   版本   pat   enc   tde   window   false   生成   

原文地址:http://blog.51cto.com/colinzhouyj/2311292

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!