我的 python 项目有这个导入列表:
import pandas as pd
import time
import sqlalchemy
from sklearn.ensemble import RandomForestClassifier
import pandas as pd
import numpy as np
from sqlalchemy import Column, String, Float, Integer, SmallInteger, MetaData
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
以及用于项目分发的规范文件:
import sys
sys.setrecursionlimit(5000)
block_cipher = None
a = Analysis(['DataManager.py'],
pathex=['E:\\ForexPredictor'],
binaries=[],
datas=[],
hiddenimports=['cython','pymysql','pandas._libs.tslibs.timedeltas','sklearn.neighbors.typedefs','sklearn.utils.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='DataManager',
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,
name='DataManager')
然后我使用这个命令来制作项目的exe文件:
pyinstaller Datamanager.spec
但是当我运行 exe 文件时它给出了这个错误:
ModuleNotFoundError: No module named 'sklearn.utils._cython_blas'
我还应该在隐藏的导入部分添加什么?
请您参考如下方法:
PyInstaller 使用 hook每个 Python 模块的机制,但有时它会遗漏一些内部包,因此您需要手动提供它们。您可以使用 --hidden-import添加 sklearn 缺少的模块。
pyinstaller -F --hidden-import="sklearn.utils._cython_blas" --hidden-import="sklearn.neighbors.typedefs" --hidden-import="sklearn.neighbors.quad_tree" --hidden-import="sklearn.tree._utils" Datamanager.py
