pyinstaller打包资源文件及包含eyed3模块时提示找不到libmagic处理
这两天用python写了个小工具,用到了eyed3,用pyinstaller打包时提示找不到libmagic
版本信息:python 3.6.5pyInstaller 3.4python-magic-bin 0.4.14eyeD3 0.88wxpython 4.0.3
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后程序的运行时路径
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
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。