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 · 322 天前 · 2833 次点击
    这是一个创建于 322 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我有一个模型,简单的类似回归算法的模型,用十几个变量去预测一个值。目前可以用 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  
       322 天前
    文件单独弄出来 然后加载?
    morgan1freeman
        2
    morgan1freeman  
       322 天前
    最好是建一个 virtualEnv 的环境 不要继承机器里面的 父包的依赖,然后弄一个干净依赖,
    wangfeng3769
        3
    wangfeng3769  
       322 天前
    可以把包弄到文件夹,然后使用 sys.path.append 把各种包的路径加进去,可能会节省一些空间。
    786375312123
        4
    786375312123  
       322 天前
    你把 python 解释器和所需要的包都放在一个文件夹里。这样不需要外部依赖也可以
    jc89898
        5
    jc89898  
       322 天前
    pex
    vituralfuture
        6
    vituralfuture  
       322 天前 via Android
    装一个虚拟环境在项目目录下,可以直接用 venv ,然后写一个启动脚本,别人鼠标双击这个脚本就能直接运行
    cdlnls
        7
    cdlnls  
       322 天前
    如果不在乎代码加密问题的话。感觉用 venv 不如用 python 的 embeddable 安装包,解压就是一个 python 环境,也不需要其他的依赖,双击就可以运行。把程序包放在一起,再配合一个 run.bat 脚本。
    HeMinWon
        8
    HeMinWon  
       322 天前
    借楼咨询一下 如果 python 使用了 shell 脚本,怎么连脚本一起打包
    akaHenry
        9
    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
        10
    loginv2  
       321 天前
    [制作绿色便携版 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  
       321 天前
    talkischeap567
        12
    talkischeap567  
       321 天前
    当然可以打包 如果你不想模型文件直接给人看到 你自己单独加密然后在程序里加个解密的不就行了?
    996bujiaban
        14
    996bujiaban  
       320 天前
    可以试试,部署在服务器,打包的 exe 只是调用接口的,这样模型放服务器上运行
    fbichijing
        15
    fbichijing  
       320 天前
    从你的描述看可能存在的问题:

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

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

    如果是隐藏模型参数的话我没有试过,应该有许多别的方法。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2768 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:50 · PVG 22:50 · LAX 06:50 · JFK 09:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.