Python 封装为 exe 问题

321 天前
 findwho

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

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

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

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

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

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

5. 结束.
loginv2
320 天前
[制作绿色便携版 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
320 天前
talkischeap567
320 天前
当然可以打包 如果你不想模型文件直接给人看到 你自己单独加密然后在程序里加个解密的不就行了?
oushunetsu
320 天前
996bujiaban
320 天前
可以试试,部署在服务器,打包的 exe 只是调用接口的,这样模型放服务器上运行
fbichijing
320 天前
从你的描述看可能存在的问题:

> 结果把我磁盘写爆了,写了 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