使用 cx_freeze 时如何加载泡菜模型?
Posted
技术标签:
【中文标题】使用 cx_freeze 时如何加载泡菜模型?【英文标题】:How do I load a pickle model when using cx_freeze? 【发布时间】:2020-05-26 05:34:51 【问题描述】:作为应用程序构建的脚本在尝试加载 pickle 模型数据时停止工作。以下是有问题的代码:
with open('model_pickle','rb') as f:
mp = pickle.load(f)
这是我正在使用的设置文件:
setup(
name="Test",
version="1.0",
options="build_exe":"include_files":["model_pickle"],
executables=[target]
)
程序在执行 python 脚本时正常运行。但是,通过cx_freeze
将其转换为可执行文件后,问题在于打开泡菜模型数据文件。我已经在有数据和没有数据的情况下对此进行了测试,所以我很确定这是问题所在。
【问题讨论】:
【参考方案1】:您可以按如下方式导入模型model = pickle.load(open('MODEL_PATH','rb'))
。希望这会奏效!
【讨论】:
【参考方案2】:我 99.99% 肯定,您还需要将 model_pickle
文件作为包数据添加到您的 setup(…)
调用中,以使其作为可执行文件运行。这是一个 setup.py
sn-p 显示包数据选项:
from setuptools import setup, find_packages
PROJECT_NAME = 'my_project' # this should reflect your package structure
setup(
# …
packages=[package for package in find_packages() \
if package.startswith(PROJECT_NAME)],
package_dir= 'my_project' : 'my_project' ,
package_data= '' : ['*.*'] ,
include_package_data=True,
zip_safe=True,
# …
)
另外,如果我是你,我会将数据文件重命名为 model_pickle.pkl
,这样你的 package_data
表达式就不必使用双通配符(如上)。
如果这不能立即奏效,我还建议 adding a MANIFEST.in
file 明确命名您的二进制数据文件。
【讨论】:
【参考方案3】:您是否使用 IDLE 测试过您的程序?可能存在pickle
解码错误...如果没有,请尝试使用此code 创建您的exe。它会导入您计算机上的所有库。它更长,但更容易:只需运行一个文件。
无论如何,更好的用户 PyInstaller(也是 PyPI 上可用的一个模块)-Related Stack Overflow answer
【讨论】:
以上是关于使用 cx_freeze 时如何加载泡菜模型?的主要内容,如果未能解决你的问题,请参考以下文章
加载泡菜 NotFittedError:TfidfVectorizer - 未安装词汇
如何通过保存经过训练的模型来减少使用 pickle 的编译时间?