我有一个模型,简单的类似回归算法的模型,用十几个变量去预测一个值。目前可以用 python 进行使用。然后我想打包然后让其他人能不装软件用。
用的是 tk 做界面,然后模型文件大概有 2 个 G 。我昨天试着 pyinstaller --onefile --add-data (把 2 个 G 的模型数据也打进去),结果把我磁盘写爆了,写了 500+G 还没弄成。 现在有办法把程序打包成 exe 文件,然后配合这 2G 的模型文件使用嘛?
1
morgan1freeman 326 天前
文件单独弄出来 然后加载?
|
2
morgan1freeman 326 天前
最好是建一个 virtualEnv 的环境 不要继承机器里面的 父包的依赖,然后弄一个干净依赖,
|
3
wangfeng3769 326 天前
可以把包弄到文件夹,然后使用 sys.path.append 把各种包的路径加进去,可能会节省一些空间。
|
4
786375312123 326 天前
你把 python 解释器和所需要的包都放在一个文件夹里。这样不需要外部依赖也可以
|
5
jc89898 326 天前
pex
|
6
vituralfuture 326 天前 via Android
装一个虚拟环境在项目目录下,可以直接用 venv ,然后写一个启动脚本,别人鼠标双击这个脚本就能直接运行
|
7
cdlnls 326 天前
如果不在乎代码加密问题的话。感觉用 venv 不如用 python 的 embeddable 安装包,解压就是一个 python 环境,也不需要其他的依赖,双击就可以运行。把程序包放在一起,再配合一个 run.bat 脚本。
|
8
HeMinWon 326 天前
借楼咨询一下 如果 python 使用了 shell 脚本,怎么连脚本一起打包
|
9
akaHenry 326 天前
1. 不用打包模型, 只打包源码.
2. 把模型上传到某个公开可以访问的网盘, or aws s3 这种. 3. 运行 main, 自动检测某个全局目录(比如 user/documents/your-app-cache 路径) 是否存在模型, 如果不存在, 自动下载. 存在, 直接调用模型 + 执行后续逻辑. 4. 关于步骤 2, 也可以 zip 打包: 模型文件 + 项目.exe + 一个 sh/bat 脚本, 运行 sh/bat 脚本, 自动把模型解压 + copy 到某个固定目录. 5. 结束. |
10
loginv2 326 天前
[制作绿色便携版 python 环境 ]( https://pages.lvtoude.ltd/post/%E5%88%B6%E4%BD%9C%E7%BB%BF%E8%89%B2%E4%BE%BF%E6%90%BA%E7%89%88-python-%E7%8E%AF%E5%A2%83/)
然后把代码部署好,最后使用[Software Protection, Software Licensing, Software Virtualization (enigmaprotector.com)]( https://enigmaprotector.com/)打包成单文件 |
11
talkischeap567 326 天前
|
12
talkischeap567 326 天前
当然可以打包 如果你不想模型文件直接给人看到 你自己单独加密然后在程序里加个解密的不就行了?
|
14
996bujiaban 325 天前
可以试试,部署在服务器,打包的 exe 只是调用接口的,这样模型放服务器上运行
|
15
fbichijing 325 天前
从你的描述看可能存在的问题:
> 结果把我磁盘写爆了,写了 500+G 还没弄成 不知道从哪个版本开始,pyinstaller 有时候会出问题。它存在着将环境里所有包都打包进去的可能性。所以我后续都是将主环境的 pyinstaller 卸载掉,然后在虚拟环境将目标程序的环境搭好,再安装 pyinstaller 打包。不知道你打包这么大是否是这个问题导致的。 另外,我不知道你将数据模型也打包进去的原因是什么?是为了隐藏模型参数吗? 如果不是为了隐藏模型参数,那么模型数据就没有必要打包进去。直接在代码里面加载某个路径下的模型就可以了。因为照一些人所说,onefile 的打包模型每次运行都会在后台解压,将模型打包进去会加大效率损耗。 如果是隐藏模型参数的话我没有试过,应该有许多别的方法。 |