我正在尝试使用PyInstaller将一些python代码转换为exe,但是导入sklearn时遇到问题。
当尝试编译这个简单的脚本main.py时,我发现了确切的问题:
import sklearn
print("success")
除非我添加到规范文件中,否则这将不起作用:
hiddenimports=['sklearn.neighbors.typedefs'],
然后它可以工作,但是由于某些原因,当我将脚本更改为
import scapy.sendrecv
import sklearn
print("success")
它可以编译,但在运行时无法导入sklearn
另一个奇怪的事情是,并不是所有的Scapy库都使它成为越野车,而实际上这个文件是这样的:
import scapy.layers
import sklearn
print("success")
效果很好...
我试图为scapy创建钩子,以在隐藏的导入中添加scapy,但是没有任何效果... 如果您有任何想法,我会很高兴听到他们的想法!
这是完整的main.spec文件
# -*- mode: python ; coding: utf-8 -*-
import sys
sys.setrecursionlimit(5000)
block_cipher = None
a = Analysis(['main.py'],
pathex=['C:\\Users\\cpin\\pyinstaller_test'],
binaries=[],
datas=[],
hiddenimports=['sklearn.neighbors.typedefs'],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
[],
exclude_binaries=True,
name='main',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='main')
以下是错误输出:
错误发生在main.py的第46行,该行是import sklearn
,上面是注释代码(例如import scapy.sendrecv
)