終於把打包問題解決了,Python打包方法——Pyinstaller CentOS下踩坑記錄html
美滋滋,趕忙發給同事試一下python
竟然報錯bash
Traceback (most recent call last): File "app.py", line 13, in <module> import d_opt_v0 as mp File "/usr/local/python36/lib/python3.6/site-packages/PyInstaller/loader/pyimod03_importers.py", line 627, in exec_module exec(bytecode, module.__dict__) File "d_opt_v0.py", line 14, in <module> from skimage.measure import label,regionprops File "/usr/local/python36/lib/python3.6/site-packages/PyInstaller/loader/pyimod03_importers.py", line 627, in exec_module exec(bytecode, module.__dict__) File "site-packages/skimage/__init__.py", line 135, in <module> File "/usr/local/python36/lib/python3.6/site-packages/PyInstaller/loader/pyimod03_importers.py", line 627, in exec_module exec(bytecode, module.__dict__) File "site-packages/skimage/data/__init__.py", line 16, in <module> File "/usr/local/python36/lib/python3.6/site-packages/PyInstaller/loader/pyimod03_importers.py", line 627, in exec_module exec(bytecode, module.__dict__) File "site-packages/skimage/data/_binary_blobs.py", line 2, in <module> File "/usr/local/python36/lib/python3.6/site-packages/PyInstaller/loader/pyimod03_importers.py", line 627, in exec_module exec(bytecode, module.__dict__) File "site-packages/skimage/filters/__init__.py", line 3, in <module> File "/usr/local/python36/lib/python3.6/site-packages/PyInstaller/loader/pyimod03_importers.py", line 627, in exec_module exec(bytecode, module.__dict__) File "site-packages/skimage/filters/edges.py", line 17, in <module> File "/usr/local/python36/lib/python3.6/site-packages/PyInstaller/loader/pyimod03_importers.py", line 627, in exec_module exec(bytecode, module.__dict__) File "site-packages/skimage/restoration/__init__.py", line 7, in <module> File "/usr/local/python36/lib/python3.6/site-packages/PyInstaller/loader/pyimod03_importers.py", line 627, in exec_module exec(bytecode, module.__dict__) File "site-packages/skimage/restoration/_denoise.py", line 8, in <module> File "/usr/local/python36/lib/python3.6/site-packages/PyInstaller/loader/pyimod03_importers.py", line 627, in exec_module exec(bytecode, module.__dict__) File "site-packages/pywt/__init__.py", line 16, in <module> File "pywt/_extensions/_pywt.pyx", line 1, in init pywt._extensions._pywt ModuleNotFoundError: No module named 'pywt._extensions._cwt'
莫非環境緣由?本地試一下,一樣的錯誤。。。服務器
搜到了這個http://www.javashuo.com/article/p-ociodjbm-gx.htmlapp
須要添加hiddenimportspa
查一下官方文檔.net
--hidden-import MODULENAME, --hiddenimport MODULENAMErest
Name an import not visible in the code of the script(s). This option can be used multiple times.code
不須要修改package中的配置,直接在打包時候引入參數就能夠htm
pyinstaller -F --hidden-import=pywt --hidden-import=pywt._extensions._cwt app.py
放到服務器上試一下,又報錯
ImportError: libxcb.so.1: cannot open shared object file: No such file directory
理論上,應該使用--add-binary,但是實際測下來--add-data也能夠
pyinstaller -F --add-binary '/usr/lib64/libxcb.so.1:.' --hidden-import=pywt --hidden-import=pywt._extensions._cwt app.py pyinstaller -F --add-data /usr/lib64/libxcb.so.1:. --hidden-import=pywt --hidden-import=pywt._extensions._cwt app.py
搞定