使用cx_freeze时如何加载泡菜模型?



我的脚本是作为应用程序构建的,当它尝试加载泡菜模型数据时,它会停止工作。以下是有问题的代码:

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将其转换为可执行文件后,问题在于打开泡菜模型数据文件。我已经在有和没有数据的情况下对此进行了测试,所以我很确定这就是问题所在。

您可以按如下方式导入模型model = pickle.load(open('MODEL_PATH','rb'))。希望这会起作用!

我 99.99% 肯定您还需要将model_pickle文件作为包数据添加到您的setup(…)调用中,以便将其作为可执行文件工作。下面是显示包数据选项的setup.py代码段:

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表达式就不必是双通配符(如上所述(。

如果这不能立即起作用,我还建议添加一个显式命名二进制数据文件的MANIFEST.in文件。

您是否使用空闲测试了您的程序?也许有一个pickle解码错误...如果没有,请尝试使用此代码创建 exe。它会导入计算机上的所有库。它更长,但更容易:只需运行一个文件。


无论如何,更好的用户 PyInstaller(也是 PyPI 上可用的模块( - 相关堆栈溢出答案

最新更新