Python 封装为 exe 问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
findwho
V2EX    Python

Python 封装为 exe 问题

  •  
  •   findwho 2024-01-06 20:25:02 +08:00 3394 次点击
    这是一个创建于 642 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    15 条回复    2024-01-08 09:17:02 +08:00
    morgan1freeman
        1
    morgan1freeman  
       2024-01-06 20:28:32 +08:00
    文件单独弄出来 然后加载?
    morgan1freeman
        2
    morgan1freeman  
       2024-01-06 20:29:23 +08:00
    最好是建一个 virtualEnv 的环境 不要继承机器里面的 父包的依赖,然后弄一个干净依赖,
    wangfeng3769
        3
    wangfeng3769  
       2024-01-06 20:54:53 +08:00
    可以把包弄到文件夹,然后使用 sys.path.append 把各种包的路径加进去,可能会节省一些空间。
    786375312123
        4
    786375312123  
       2024-01-06 21:18:35 +08:00
    你把 python 解释器和所需要的包都放在一个文件夹里。这样不需要外部依赖也可以
    jc89898
        5
    jc89898  
       2024-01-06 21:46:53 +08:00
    pex
    vituralfuture
        6
    vituralfuture  
       2024-01-06 22:05:37 +08:00 via Android
    装一个虚拟环境在项目目录下,可以直接用 venv ,然后写一个启动脚本,别人鼠标双击这个脚本就能直接运行
    cctv6
        7
    cctv6  
       2024-01-06 22:12:47 +08:00
    如果不在乎代码加密问题的话。感觉用 venv 不如用 python 的 embeddable 安装包,解压就是一个 python 环境,也不需要其他的依赖,双击就可以运行。把程序包放在一起,再配合一个 run.bat 脚本。
    HeMinWon
        8
    HeMinWon  
       2024-01-06 22:32:10 +08:00
    借楼咨询一下 如果 python 使用了 shell 脚本,怎么连脚本一起打包
    akaHenry
        9
    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
        10
    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
        11
    talkischeap567  
       2024-01-07 13:47:03 +08:00
    talkischeap567
        12
    talkischeap567  
       2024-01-07 13:50:25 +08:00
    当然可以打包 如果你不想模型文件直接给人看到 你自己单独加密然后在程序里加个解密的不就行了?
    oushunetsu
        13
    oushunetsu  
       2024-01-07 21:15:09 +08:00
    996bujiaban
        14
    996bujiaban  
       2024-01-08 07:10:46 +08:00
    可以试试,部署在服务器,打包的 exe 只是调用接口的,这样模型放服务器上运行
    fbichijing
        15
    fbichijing  
       2024-01-08 09:17:02 +08:00
    从你的描述看可能存在的问题:

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

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

    如果是隐藏模型参数的话我没有试过,应该有许多别的方法。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3101 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 11:06 PVG 19:06 LAX 04:06 JFK 07:06
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86