• 请不要在回答技术问题时复制粘贴 AI 生成的内容
ysicing
V2EX  ›  程序员

大家如何打包 Python 程序的

  •  
  •   ysicing ·
    ysicing · Aug 17, 2017 · 4656 views
    This topic created in 3275 days ago, the information mentioned may be changed or developed.
    大家通常如何打包 python 程序的,避免不同环境的差异(Centos/Ubuntu)。
    
    1.Pyinstaller
    2.Docker
    3.放弃用 Go 重写?
    
    15 replies    2017-08-18 11:59:35 +08:00
    redapple0204
        1
    redapple0204  
       Aug 17, 2017
    同平台的 python 程序能有什么差异....
    YUX
        2
    YUX  
    PRO
       Aug 17, 2017
    Docker
    dbow
        3
    dbow  
       Aug 17, 2017
    virtualenv + 自己从源代码 build 的 python2.7 , 在线上跟线下都保持一致.
    zhangchioulin
        4
    zhangchioulin  
       Aug 17, 2017 via iPhone
    第 3 条是乱入吗……
    yuanfnadi
        5
    yuanfnadi  
       Aug 17, 2017 via iPhone
    docker 大法好
    VShawn
        6
    VShawn  
       Aug 17, 2017 via Android
    4 用汇编重写
    janxin
        7
    janxin  
       Aug 17, 2017   ❤️ 1
    如果是服务器程序,docker
    如果是桌面程序,pyinstaller
    SuperMild
        8
    SuperMild  
       Aug 17, 2017
    以后还是转 Go 吧,语言和标准库非常稳定(可以预见 Go 2、Go 3 也很容易向下兼容),打包方便,运行效率高,发展速度也快(第三方库越来越多)。
    mckelvin
        9
    mckelvin  
       Aug 17, 2017
    你说的不同发型版本环境的差异,只有含 C/C++ 扩展的 Python package 才有这个顾虑吧?

    我个人的最佳实践是,构建环境和线上环境都在 docker 里,但不一定同一个 docker image(比如前者需要构建所需的编译软件、但后者不需要),打包一份 wheel 格式,一份 tar.gz 源代码。然后把打包好的文件上传到内网 pypi 源(用 devpi 搭的)。最后构建线上运行的 docker images 时从 devpi 安装 python 包。
    ysicing
        10
    ysicing  
    OP
       Aug 18, 2017
    @redapple0204 有些包还是存在差异的


    @zhangchioulin 不是,主要就是有些依赖的包的差异太蛋疼了,有时候不好排查,然后就有小伙伴提建议用 go 重写

    看来大家也是用 docker
    XIVN1987
        11
    XIVN1987  
       Aug 18, 2017
    Go 语法那么丑你们都能接受??
    nicevar
        12
    nicevar  
       Aug 18, 2017
    python 打包确实麻烦,特别是复杂的项目,我记得六七年前某导师带领学生用 python 做了一个航空类的项目,后面打包遇到问题让我去解决,我一看那个打出来的包 500 多 M,引用了一大堆库,真是懵了
    用 Go 重写不太现实的,如果不是服务器程序,很多用到的库 Go 连个影子也没有,也没人去写
    metaquant
        13
    metaquant  
       Aug 18, 2017 via iPhone
    @XIVN1987 我以为就我一个人这么想,哈哈,感觉 go 的语法真是丑,还不如 java
    weakish
        14
    weakish  
       Aug 18, 2017
    平台类似的话,仅仅是 pip 包依赖问题, 先尝试 Pipfile.lock, 不行再试其他。
    Pyinstaller 一般更多地是解决 cross os 打包发布的问题。
    Docker/lxc 则是解决各种 pip 包以外的依赖很复杂的问题。
    ysicing
        15
    ysicing  
    OP
       Aug 18, 2017
    @XIVN1987 @metaquant @nicevar 没用过 Go 哈哈。


    @weakish 还是搞 docker 省力
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2689 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 63ms · UTC 15:46 · PVG 23:46 · LAX 08:46 · JFK 11:46
    ♥ Do have faith in what you're doing.