问题
某些情况下,当导入 seaborn
包并制作可执行文件(.exe) 时,会出现以下 ImportError 错误。如何解决?
Traceback (most recent call last):
File "C:\WinPython-64bit-3.5.2.3Qt5\python-3.5.2.amd64\lib\site-packages\cx_Fr
eeze\initscripts\__startup__.py", line 12, in <module>
__import__(name + "__init__")
File "C:\WinPython-64bit-3.5.2.3Qt5\python-3.5.2.amd64\lib\site-packages\cx_Fr
eeze\initscripts\Console.py", line 21, in <module>
scriptModule = __import__(moduleName)
File "GUI.py", line 22, in <module>
import seaborn as sns
File "C:\WinPython-64bit-3.5.2.3Qt5\python-3.5.2.amd64\lib\site-packages\seabo
rn\__init__.py", line 9, in <module>
from .linearmodels import *
File "C:\WinPython-64bit-3.5.2.3Qt5\python-3.5.2.amd64\lib\site-packages\seabo
rn\linearmodels.py", line 8, in <module>
from scipy.spatial import distance
File "C:\WinPython-64bit-3.5.2.3Qt5\python-3.5.2.amd64\lib\site-packages\scipy
\spatial\__init__.py", line 93, in <module>
from .ckdtree import *
ImportError: No module named 'scipy.spatial.ckdtree'
附加信息
设置
- Windows 7 Enterprise 64位
- WinPython-64bit-3.5.2.3Qt5 (Python 3.5.2 64位)
- cx_Freeze 5.0
scipy 0.18.1
按照SO问题“Cx_freeze ImportError no module named scipy”答案中的指示,将
cx_Freeze/hooks.py
中的finder.IncludePackage("scipy.lib")
重命名为finder.IncludePackage("scipy._lib")
setup.py:
import os
import sys
from cx_Freeze import setup, Executable
os.environ['TCL_LIBRARY'] = r"C:\WinPython-64bit-3.5.2.3Qt5\python-3.5.2.amd64\tcl\tcl8.6"
os.environ['TK_LIBRARY'] = r"C:\WinPython-64bit-3.5.2.3Qt5\python-3.5.2.amd64\tcl\tk8.6"
base = None
options = {
'build_exe': {
'excludes': ['gtk', 'PyQt4', 'Tkinter'],
'packages': ['scipy'],
'includes': ['scipy.spatial.ckdtree'],
}
}
executables = [
Executable('GUI.py', base=base)
]
setup(name='GUI',
version='0.1',
description='GUI test',
executables=executables,
options=options
)