推荐学习书目
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 · Jan 6, 2024 · 4555 views
    This topic created in 862 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

    如果是隐藏模型参数的话我没有试过,应该有许多别的方法。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5972 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 91ms · UTC 03:25 · PVG 11:25 · LAX 20:25 · JFK 23:25
    ♥ Do have faith in what you're doing.