解決could not import name ‘zlib_encode‘ from ‘imagecodecs‘
阿新 • • 發佈:2021-01-21
解決could not import name ‘zlib_encode’ from ‘imagecodecs’
這幾天用python處理tiff檔案使用了tifffile
庫 https://pypi.org/project/tifffile/ 用於tiff圖片的檔案的讀寫等操作
遇到問題
tifffile
依賴imagecodecs
pip安裝tifffile
後沒有自帶安裝imagecodecs
庫,需要自己再安裝一下的
剛開始使用pip安裝imagecodecs
pip install imagecodecs
執行指令碼後報錯
could not import name 'zlib_encode' from 'imagecodecs'
解決問題
改用編譯好的imagecodecs
wheel包進行安裝
- 下載對應版本的wheel包
https://www.lfd.uci.edu/~gohlke/pythonlibs/#imagecodecs - 解除安裝已安裝的
imagecodecs
pip uninstall imagecodecs
- 安裝wheel包
pip install imagecodecs-2021.1.11-cp37-cp37m-win_amd64.whl
經過以上操作,執行程式指令碼發現一切順利,不過不要高興的太早
再遇到問題
pyinstaller打包後的exe
執行還是報上面的錯誤,以為是因為沒引入imagecodecs
,在打包配置檔案.spec
hiddenimport
加入imagecodecs
發現還是報錯
錯誤排查
- 重新打包一下,不再配置-F引數
pyinstaller pdf2tiff.py
-
檢視dist打包目錄
- 檢視到pdf2tiff目錄下已經有imagecodecs目錄,說明不是hiddenimport問題
- imagecodecs目錄中只有
_shared.cp37-win_amd64.pyd
檔案 - 懷疑這裡缺少檔案啦
-
檢視
imagecodecs
原始碼- Python37\Lib\site-packages\imagecodecs檢視
imagecodecs.py
原始碼 - 發現
zib_encode
使用的是_zlib.cp37-win_amd64.pyd
- 複製
_zlib.cp37-win_amd64.pyd
到dist/pdf2tiff/imagecodecs
目錄,發現不再報錯
- Python37\Lib\site-packages\imagecodecs檢視
-
解決問題
- 複製
_zlib.cp37-win_amd64.pyd
到pdf2tiff.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