1. 程式人生 > >pyinstaller打包資原始檔及包含eyed3模組時提示找不到libmagic處理

pyinstaller打包資原始檔及包含eyed3模組時提示找不到libmagic處理

這兩天用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