Python 封装为 exe 问题

2024-01-06 20:25:02 +08:00
 findwho

我有一个模型,简单的类似回归算法的模型,用十几个变量去预测一个值。目前可以用 python 进行使用。然后我想打包然后让其他人能不装软件用。

用的是 tk 做界面,然后模型文件大概有 2 个 G 。我昨天试着 pyinstaller --onefile --add-data (把 2 个 G 的模型数据也打进去),结果把我磁盘写爆了,写了 500+G 还没弄成。 现在有办法把程序打包成 exe 文件,然后配合这 2G 的模型文件使用嘛?

2913 次点击
所在节点    Python
15 条回复
morgan1freeman
2024-01-06 20:28:32 +08:00
文件单独弄出来 然后加载?
morgan1freeman
2024-01-06 20:29:23 +08:00
最好是建一个 virtualEnv 的环境 不要继承机器里面的 父包的依赖,然后弄一个干净依赖,
wangfeng3769
2024-01-06 20:54:53 +08:00
可以把包弄到文件夹,然后使用 sys.path.append 把各种包的路径加进去,可能会节省一些空间。
786375312123
2024-01-06 21:18:35 +08:00
你把 python 解释器和所需要的包都放在一个文件夹里。这样不需要外部依赖也可以
jc89898
2024-01-06 21:46:53 +08:00
pex
vituralfuture
2024-01-06 22:05:37 +08:00
装一个虚拟环境在项目目录下,可以直接用 venv ,然后写一个启动脚本,别人鼠标双击这个脚本就能直接运行
cdlnls
2024-01-06 22:12:47 +08:00
如果不在乎代码加密问题的话。感觉用 venv 不如用 python 的 embeddable 安装包,解压就是一个 python 环境,也不需要其他的依赖,双击就可以运行。把程序包放在一起,再配合一个 run.bat 脚本。
HeMinWon
2024-01-06 22:32:10 +08:00
借楼咨询一下 如果 python 使用了 shell 脚本,怎么连脚本一起打包
akaHenry
2024-01-06 23:35:42 +08:00
1. 不用打包模型, 只打包源码.

2. 把模型上传到某个公开可以访问的网盘, or aws s3 这种.

3. 运行 main, 自动检测某个全局目录(比如 user/documents/your-app-cache 路径) 是否存在模型, 如果不存在, 自动下载. 存在, 直接调用模型 + 执行后续逻辑.

4. 关于步骤 2, 也可以 zip 打包: 模型文件 + 项目.exe + 一个 sh/bat 脚本, 运行 sh/bat 脚本, 自动把模型解压 + copy 到某个固定目录.

5. 结束.
loginv2
2024-01-07 12:39:36 +08:00
[制作绿色便携版 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/)打包成单文件
talkischeap567
2024-01-07 13:47:03 +08:00
talkischeap567
2024-01-07 13:50:25 +08:00
当然可以打包 如果你不想模型文件直接给人看到 你自己单独加密然后在程序里加个解密的不就行了?
oushunetsu
2024-01-07 21:15:09 +08:00
996bujiaban
2024-01-08 07:10:46 +08:00
可以试试,部署在服务器,打包的 exe 只是调用接口的,这样模型放服务器上运行
fbichijing
2024-01-08 09:17:02 +08:00
从你的描述看可能存在的问题:

> 结果把我磁盘写爆了,写了 500+G 还没弄成
不知道从哪个版本开始,pyinstaller 有时候会出问题。它存在着将环境里所有包都打包进去的可能性。所以我后续都是将主环境的 pyinstaller 卸载掉,然后在虚拟环境将目标程序的环境搭好,再安装 pyinstaller 打包。不知道你打包这么大是否是这个问题导致的。

另外,我不知道你将数据模型也打包进去的原因是什么?是为了隐藏模型参数吗?
如果不是为了隐藏模型参数,那么模型数据就没有必要打包进去。直接在代码里面加载某个路径下的模型就可以了。因为照一些人所说,onefile 的打包模型每次运行都会在后台解压,将模型打包进去会加大效率损耗。

如果是隐藏模型参数的话我没有试过,应该有许多别的方法。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1006464

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX