1. 程式人生 > 其它 >解決could not import name ‘zlib_encode‘ from ‘imagecodecs‘

解決could not import name ‘zlib_encode‘ from ‘imagecodecs‘

技術標籤:pythonpython

解決could not import name ‘zlib_encode’ from ‘imagecodecs’

這幾天用python處理tiff檔案使用了tifffilehttps://pypi.org/project/tifffile/ 用於tiff圖片的檔案的讀寫等操作

遇到問題

tifffile依賴imagecodecs pip安裝tifffile後沒有自帶安裝imagecodecs庫,需要自己再安裝一下的
剛開始使用pip安裝imagecodecs

pip install imagecodecs

執行指令碼後報錯

could not import name 'zlib_encode' from 'imagecodecs'

解決問題

改用編譯好的imagecodecswheel包進行安裝

  1. 下載對應版本的wheel包
    https://www.lfd.uci.edu/~gohlke/pythonlibs/#imagecodecs
  2. 解除安裝已安裝的imagecodecs
pip uninstall imagecodecs
  1. 安裝wheel包
pip install imagecodecs-2021.1.11-cp37-cp37m-win_amd64.whl

經過以上操作,執行程式指令碼發現一切順利,不過不要高興的太早

再遇到問題

pyinstaller打包後的exe執行還是報上面的錯誤,以為是因為沒引入imagecodecs,在打包配置檔案.spec

增加配置hiddenimport加入imagecodecs發現還是報錯

錯誤排查

  1. 重新打包一下,不再配置-F引數
pyinstaller pdf2tiff.py
  1. 檢視dist打包目錄

    • 檢視到pdf2tiff目錄下已經有imagecodecs目錄,說明不是hiddenimport問題
    • imagecodecs目錄中只有_shared.cp37-win_amd64.pyd檔案
    • 懷疑這裡缺少檔案啦
  2. 檢視imagecodecs原始碼

    • Python37\Lib\site-packages\imagecodecs檢視imagecodecs.py原始碼
    • 發現zib_encode使用的是_zlib.cp37-win_amd64.pyd
      檔案
    • 複製_zlib.cp37-win_amd64.pyddist/pdf2tiff/imagecodecs目錄,發現不再報錯
  3. 解決問題

    • 複製_zlib.cp37-win_amd64.pydpdf2tiff.spec同級目錄
    • pdf2tiff.spec配置data
    		datas=[
                ('_zlib.cp37-win_amd64.pyd','imagecodecs'),
            ],
    

    執行打包命令 pyinstaller pdf2tiff.py

備註說明

本地環境

windows 10 64bit
python 3.7 64bit
tifffile 2021.1.14
imagecodecs 2021.1.11

我的程式名稱pdf2tiff