使用pyinstaller打包python程序有"NoModuleFindError"

Using pyinstaller to package python program and there is a "NoModuleFindError"

我使用 pyinstaller 将我的 python 程序打包成可执行程序 (exe)。

我的程序版本:

Pyinstaller :3.3.1

Python:3.6.1 Windows:10-10.0.16299-SP0


我可以在我的命令行 window 中使用命令 "python data_processing_gui.py" 运行 data_processing_gui.py 文件,没有任何错误。


我用命令打包我的python程序(名字是data_processing_gui.py):

pyinstaller -F -p C:\Users\fanyu\Anaconda3\Lib;C:\Users\fanyu\Anaconda3\Lib\site-packages;C:\Users\fanyu\Anaconda3\Lib\site-packages\PyQt5\Qt\bin;C:\Users\fanyu\Anaconda3\Lib\site-packages\pydicom;C:\Users\fanyu\Anaconda3\Lib\site-packages\radiomics;C:\Users\fanyu\Anaconda3\Lib\site-packages\pywt;C:\Users\fanyu\Anaconda3\Lib\site-packages\pywt\_extensions;C:\Users\fanyu\Anaconda3\Lib\site-packages\tensorflow;C:\Users\fanyu\Anaconda3\Lib\site-packages\SimpleITK;C:\Users\fanyu\Anaconda3\Lib\site-packages\PIL;C:\Users\fanyu\Anaconda3\Lib\site-packages\pandas;C:\Users\fanyu\Anaconda3\Lib\site-packages\nrrd;C:\Users\fanyu\Anaconda3\Lib\site-packages\numpy -i C:\Users\fanyu\Desktop\work\package\image\doctor.ico data_processing_gui.py

当我运行在windows'命令行window中编写上面的代码时没有错误,但是当我运行目标程序(data_progressing_gui.exe),有一个ModuleNotFindError,错误信息是:

Traceback (most recent call last): File "data_processing_gui.py", line 12, in File "c:\users\fanyu\anaconda3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module exec(bytecode, module.dict) File "site-packages\radiomics__init__.py", line 15, in File "c:\users\fanyu\anaconda3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module exec(bytecode, module.dict) File "site-packages\radiomics\imageoperations.py", line 6, in
File "c:\users\fanyu\anaconda3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module exec(bytecode, module.dict) File "site-packages\pywt__init__.py", line 17, in File "c:\users\fanyu\anaconda3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module exec(bytecode, module.dict) File "site-packages\pywt_functions.py", line 17, in File "c:\users\fanyu\anaconda3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 714, in load_module module = loader.load_module(fullname) File "pywt/_extensions/_pywt.pyx", line 1, in init pywt._extensions._pywt (pywt_extensions_pywt.c:31281) ModuleNotFoundError: No module named 'pywt._extensions._cwt' [7564] Failed to execute script data_processing_gui

程序似乎找不到指定的包路径(pywt._extensions._cwt),但是我已经在pyinstaller的参数列表中添加了路径。

起初,我认为可能是我的pyinstaller 有问题,所以我尝试重新安装它。然后我写了一个简单的 python 程序来测试它,它 运行 是正确的。

我试了很多都解决不了,所以才来这里求助,如有大神指教,不胜感激

我在以下问题的答案中找到了解决我的问题的方法ModuleNotFoundError: No module named 'pandas._libs.tslibs.timedeltas'

我无法解释原因,但它确实解决了我的问题。

解决方法是: 使用 pyinstaller 生成“.spec”文件后,将缺少的模块添加到“.spec”文件中 "hiddenimport=[]",如下所示:

hiddenimport=["pywt","pywt._estentions._cwt"]

然后使用这个文件生成你的exe文件:

pyinstaller my.spec