使用pyinstaller编译时,sklearn导入不适用于scapy导入

时间:2019-09-16 13:23:18

标签: python scikit-learn pyinstaller scapy

我正在尝试使用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')

以下是错误输出:

error code 错误发生在main.py的第46行,该行是import sklearn,上面是注释代码(例如import scapy.sendrecv

0 个答案:

没有答案