我刚创建了一个可以在IPython中编译和工作的小型GUI程序,但是当我尝试使用pyinstaller将其导出到.exe
时,它会给我一个导入错误。我确定它是sklearn
,因为当我注释sklearn
导入时,我的文件在构建时打开正常。
C:\Users\Chris\Anaconda>C:/Users/Chris/Anaconda/dist/Room_Test.exe
WARNING: file already exists but should not: C:\Users\Chris\AppData\Local\Temp\_MEI100402\Include\pyconfig.h
Traceback (most recent call last):
File "<string>", line 9, in <module>
File "C:\Users\Chris\Anaconda\Lib\site- packages\PyInstaller\loader\pyi_importers.py", line 270, in load_module
exec(bytecode, module.__dict__)
File "C:\Users\Chris\Anaconda\build\Room_Test\out00- PYZ.pyz\sklearn.neighbors", line 6, in <module>
File "C:\Users\Chris\Anaconda\Lib\site- packages\PyInstaller\loader\pyi_importers.py", line 409, in load_module
module = imp.load_module(fullname, fp, filename, self._c_ext_tuple)
File "dist_metrics.pxd", line 48, in init sklearn.neighbors.ball_tree (sklearn\neighbors\ball_tree.c:35726)
File "C:\Users\Chris\Anaconda\Lib\site- packages\PyInstaller\loader\pyi_importers.py", line 409, in load_module
module = imp.load_module(fullname, fp, filename, self._c_ext_tuple)
File "dist_metrics.pyx", line 52, in init sklearn.neighbors.dist_metrics (sklearn\neighbors\dist_metrics.c:25494)
ImportError: No module named typedefs
答案 0 :(得分:9)
您仍然可以通过在命令中添加以下内容来使用pyinstaller:
--hidden-import sklearn.neighbors.typedefs
或将以下内容添加到.spec
文件中:
hiddenimports=['cython', 'sklearn', 'sklearn.neighbors.typedefs']
答案 1 :(得分:6)
最好使用spec文件导入另一个隐藏的库可能会导致问题。我列出了所有Sklearn库并添加到spec文件中作为这样的hiddenimports:
# -*- mode: python -*-
block_cipher = None
a = Analysis(['MyPythonApplication.py'],
pathex=['..\\ApplicationFolder'],
binaries=[],
datas=[],
hiddenimports=['cython', 'sklearn', 'sklearn.ensemble', 'sklearn.neighbors.typedefs', 'sklearn.neighbors.quad_tree', 'sklearn.tree._utils'],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
name='ExeFileName',
debug=False,
strip=False,
upx=False,
console=False )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='ApplicationName')
答案 2 :(得分:3)
自己解决了!结束使用py2exe。即使在x64系统上尚不支持捆绑到一个.exe,导入模块也更容易。但为我的目的工作。刚刚将以下行添加到“包含”:
sklearn.neighbors.typedefs
答案 3 :(得分:1)
找到这个目录“E:\ Anaconda3 \ Lib \ site-packages \ PyInstaller \ hooks”。 添加文件“hook-pandas.py”,将此内容写入此文件:
"""
Hook for pandas.
Suport for pyinstaller error : No module named ‘pandas._libs.tslibs.timedeltas
"""
hiddenimports=[
#all your previous hidden imports
'pandas', 'pandas._libs.tslibs.timedeltas',
'sklearn.neighbors.typedefs'
]
然后使用此命令:
pyinstaller -F myfile.py --hidden-import sklearn.neighbors.typedefs
然后就可以了!