依赖关系搞死人啊 - 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
julyclyde
V2EX    Python

依赖关系搞死人啊

  •  
  •   julyclyde
    julyclyde 2015-07-23 15:00:05 +08:00 6106 次点击
    这是一个创建于 3788 天前的主题,其中的信息可能已经有所发展或是发生改变。
    昨天有一段代码,自己机器上正常,放到线上就挂了
    OAuth1 client的程序,用requests-oauthlib依赖oauthlib

    我自己机器上oauthlib==0.7.2 以前装的旧版本;线上服务器pip下载1.0.0
    结果发现其中signature.py内容改了,算法用pyjwt库实现,但oauthlib本身不强制依赖pyjwt,而是oauthlib[signedtoken]才依赖pyjwt,坑死人

    然后,装吧,又发现pyjwt依赖的cffi现场编译需要libffi-dev库。真是……最后定稿是给线上也用旧的oauthlib==0.7.2

    转到新岗位才7个工作日就搞出19分钟大事故。唉~
    31 条回复    2015-07-25 05:26:11 +08:00
    realpg
        1
    realpg  
    PRO
       2015-07-23 15:03:01 +08:00
    我不是搞python的,对你说的问题细节不太清楚

    我只有一个问题

    为啥你们公司允许开发环境使用跟生产服务器不一样的版本的东西?
    clino
        2
    clino  
       2015-07-23 15:06:29 +08:00 via Android
    没有一个和生产环境一致的测试环境先试试看?
    mhycy
        3
    mhycy  
       2015-07-23 15:08:13 +08:00
    别的不说,改线上环境居然能造成19分钟停机,入口负载均衡怎么做的,没备机做平滑升级?
        4
    nellace  
       2015-07-23 15:18:34 +08:00
    19分钟就是大事故了,肯定是个大厂啊
    neoblackcap
        5
    neoblackcap  
       2015-07-23 15:29:25 +08:00
    我只是好奇,为什么你们生产环境可以连开发环境的版本号都对不上
    learnshare
        6
    learnshare  
       2015-07-23 15:52:55 +08:00
    必须保证开发和运行环境统一,还得随手把第三方包升级了
    ChangxuBlack
        7
    ChangxuBlack  
       2015-07-23 15:55:04 +08:00
    或许可以试试用setuptools管理依赖
    glasslion
        8
    glasslion  
       2015-07-23 15:55:42 +08:00
    开发环境和生产环境的版本号都能搞得不一样, 出大事故不是早晚的事.

    而且当你们发现了版本号不一致的问题后, 为什么不第一时间回退到 0.7.2 这个老的可行版本, 反而去尝试去安装 1.0 这个你们从来没有使用和测试过的版本.
    yueyoum
        9
    yueyoum  
       2015-07-23 16:03:45 +08:00
    新人都这样, 遇到问题 不要慌

    先去问老员工。


    当年 我去线上 重启服务, 没看清, 把其他服务给重启了, 而且重启还失败了。。。
    julyclyde
        10
    julyclyde  
    OP
       2015-07-23 16:28:39 +08:00
    @glasslion 请你注意先后顺序。我是回滚了代码之后才检查到0.7.2和1.0.0的问题的
    laoyuan
        11
    laoyuan  
       2015-07-23 16:35:01 +08:00
    怪不得 Rails Gemfile 里面的gem 后面都跟着版本号,我初学觉得好麻烦啊
    est
        12
    est  
       2015-07-23 16:38:21 +08:00
    @laoyuan pip也可以,只是很多人懒得这么干而已。其实现在pip都支持打包成静态包了。
    julyclyde
        13
    julyclyde  
    OP
       2015-07-23 16:43:01 +08:00
    @mhycy 访问到我改的那个位置的时候才出错,错误信息是无法import jwt库,当时没理解为什么还有jwt。我还以为是别人的bug就没当场回滚。有部署权限的人太多也是个麻烦事啊
    julyclyde
        14
    julyclyde  
    OP
       2015-07-23 16:43:33 +08:00
    @ChangxuBlack pip就是setuptools的包装吧。给点儿建设性的意见
    julyclyde
        15
    julyclyde  
    OP
       2015-07-23 16:44:28 +08:00
    @glasslion 现在线上用旧版本,已经积习难改了。我怀疑将来requirements内部会有版本冲突
    julyclyde
        16
    julyclyde  
    OP
       2015-07-23 16:44:44 +08:00
    @learnshare 我这就是随手升级了才坏事的。
    poorguy
        17
    poorguy  
       2015-07-23 17:07:03 +08:00
    我就弱弱的问一下,没用virtualenv之类的吗
    julyclyde
        18
    julyclyde  
    OP
       2015-07-23 17:40:20 +08:00
    @poorguy 有。但这和virtualenv有啥关系?
    tabris17
        19
    tabris17  
       2015-07-23 18:31:18 +08:00
    为了避免麻烦,我把第三方库的代码复制出来和代码放一起打包了
    ChangxuBlack
        20
    ChangxuBlack  
       2015-07-23 22:27:05 +08:00
    @julyclyde 你可以写个setup.py,里面写上依赖啊,然后部署的时候用python setup.py install
    laotaitai
        21
    laotaitai  
       2015-07-23 23:01:06 +08:00
    上Docker, 把你开发搭建好的环境, 弄到线上去. 再也没有"我这里运行得好好的, 为嘛到你那里就不行呢"的问题了.
    poorguy
        22
    poorguy  
       2015-07-23 23:06:00 +08:00
    @julyclyde 那估计我没看懂你的主题了,virtualenv可以保证开发环境和生产环境一致
    julyclyde
        23
    julyclyde  
    OP
       2015-07-23 23:36:03 +08:00 via iPad
    @poorguy 你想得过远了。virtualenv可以用来维持一个稳定体系,我这里也用了。但往里加新包时的混乱,用不用v都会发生的
    julyclyde
        24
    julyclyde  
    OP
       2015-07-23 23:36:53 +08:00 via iPad
    @ChangxuBlack 目前有requirements 但r和setup.py都只能维持一瞬间的和平,很快还会被打破的
    hiddenman
        25
    hiddenman  
       2015-07-23 23:42:15 +08:00
    @realpg 我们测试用PHP5.5 线上用PHP5.4
    9hills
        26
    9hills  
       2015-07-24 00:45:02 +08:00 via iPhone
    Requirments 里不指定版本的锅。
    julyclyde
        27
    julyclyde  
    OP
       2015-07-24 08:13:06 +08:00 via iPad
    @9hills requirements里只写了我自己用的包。用的包依赖的其它包没写,就载在这里
    HowardMei
        28
    HowardMei  
       2015-07-24 09:24:09 +08:00   3
    一般的python库依赖用 https://pex.readthedocs.org/en/latest/ 打包就可以了,
    如果还依赖系统库,可以考虑 https://github.com/spotify/dh-virtualenv 打成deb包[alien deb->rpm]
    有篇文章讲了这个问题: https://nylas.com/blog/packaging-deploying-python
    julyclyde
        29
    julyclyde  
    OP
       2015-07-24 12:39:43 +08:00
    终于钓来一个有含金量的回复
    ChangxuBlack
        30
    ChangxuBlack  
       2015-07-24 22:44:16 +08:00
    @julyclyde 有道理,不过setup.py可以限定版本号。。。确实不好解决
    qqblog
        31
    qqblog  
       2015-07-25 05:26:11 +08:00
    没看懂1.0.0版本到底有什么问题,为什么没能编译libffi-dev库?难道是centos问题?只是你有问题吧,依赖并没问题,熟悉就好啦
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1335 人在线   最高记录 6679     nbsp; Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 17:03 PVG 01:03 LAX 09:03 JFK 12:03
    Do have faith in what you're doing.
    ubao msn 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