我的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'
我还应该向隐藏的导入部分添加什么?
答案 0 :(得分:1)
PyInstaller对每个Python模块使用hook机制,但是有时它会丢失一些内部软件包,因此您需要手动提供它们。您可以使用--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
答案 1 :(得分:1)
在我执行以下代码后,它适用于我的代码:
pyinstaller --hidden-import="sklearn.utils._cython_blas" --hidden-import="sklearn.neighbors.typedefs" --hidden-import="sklearn.neighbors.quad_tree" --hidden-import=" sklearn.tree._utils" --hidden-import="sklearn.neighbors._typedefs" --hidden-import="sklearn.utils._weight_vector" --hidden-import="sklearn.neighbors._quad_tree" namepythonfile.py>
尝试将所有模块添加到隐藏导入代码中即可成功
答案 2 :(得分:0)
您是否尝试过阅读有关.spec文件使用的文档? https://pyinstaller.readthedocs.io/en/stable/spec-files.html#using-spec-files
我不知道这是问题所在,但是用于创建.exe文件的命令中的* .py文件在哪里?据我所知,您必须给pyinstaller一个.py文件才能创建程序。
答案 3 :(得分:0)
添加
import sklearn.utils._cython_blas
也许
import sklearn.neighbors.typedefs
import sklearn.neighbors.quad_tree
import sklearn.tree
import sklearn.tree._utils
输入您的代码。