推荐学习书目
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
slideclick
V2EX  ›  Python

python 的包管理是否追上了 node.js?

  •  
  •   slideclick · Mar 2, 2016 · 7358 views
    This topic created in 3769 days ago, the information mentioned may be changed or developed.
    node.js 包管理的方便之处:
    1.package.json 文件定义了全部依赖,可以一键安装全部依赖。
    2.安装的依赖在项目本地目录下,不干扰别的项目,可以一键部署。

    python 当前的包管理到这个水平了吗?做到第一条至少不难吧。
    50 replies    2018-12-02 19:59:21 +08:00
    sudoz
        1
    sudoz  
       Mar 2, 2016 via Android
    virualenv 加 pip
    leeyiw
        2
    leeyiw  
       Mar 2, 2016
    requirements.txt 和 virtualenv 结合,和 LZ 说的这两点达到的效果是一样的。
    shunia
        3
    shunia  
       Mar 2, 2016   ❤️ 3
    追?不应该是 npm 学习了诸多包管理生态(包括 easy_install,pip 等)吗?
    slideclick
        4
    slideclick  
    OP
       Mar 2, 2016
    谢楼上各位。
    hbkdsm
        5
    hbkdsm  
       Mar 2, 2016 via Android
    我怎么觉得第二条是缺点。。。一个项目都要下载几百兆的依赖
    slideclick
        6
    slideclick  
    OP
       Mar 2, 2016
    @shunia node.js 是后来者,肯定吸取前人教训。 node.js 出生时包管理就这么方便, python 没少走弯路因此有历史包袱。
    slideclick
        7
    slideclick  
    OP
       Mar 2, 2016
    @hbkdsm python 大君有次接受采访说,他最怕别人请他帮助解决打包的问题。第二天的方便之处是项目可以 COPY 就部署。这对 python 来说更为重要,因为 python 有 2 和 3 的分裂,因此隔离各个项目的库更加重要。
    TangMonk
        8
    TangMonk  
       Mar 2, 2016
    bundler 好啊
    hahastudio
        9
    hahastudio  
       Mar 2, 2016
    跑在前面的人是不是追上跑后面的人了?
    你这是要套圈啊
    bboyliu
        10
    bboyliu  
       Mar 2, 2016
    @sudoz Would you please share me the answer about what is virualenv?
    sjtlqy
        11
    sjtlqy  
       Mar 2, 2016
    O(∩_∩)O哈哈~, C++有包管理吗?  不还是照样牛逼
    neoblackcap
        12
    neoblackcap  
       Mar 2, 2016
    npm 那水平就不要拿出来说先进了。遇到有需要编译的库,大家一样容易挂。还有 npm3 之后才开始了扁平化各类包。之前各个库自己管理自己的库,不断嵌套,在 windows 下还爆出了目录嵌套过长挂掉的情况,一个依赖下载几十兆。当时我真是大开眼界了,没想到包管理还可以这样做。真是简单粗暴啊!

    现在的 npm 才说好点,说其他包管理追上它,那真是一个直钩钓鱼。
    BOYPT
        13
    BOYPT  
       Mar 2, 2016
    @sjtlqy C++有 CPM , C 有 clib 。
    echo1937
        14
    echo1937  
       Mar 2, 2016
    一厨顶十黑 或者说 提问的艺术。
    sudoz
        15
    sudoz  
       Mar 2, 2016
    @bboyliu why are you so zhuangbi? 手机输入非英文词组少了一个字母,你就看不懂了? fxxk
    pinkman
        16
    pinkman  
       Mar 2, 2016 via iPhone
    别的不说我最喜欢的是 nrm, nrm 和 nrm use 让我装包再也不怕墙了
    congeec
        17
    congeec  
       Mar 2, 2016 via iPad
    @BOYPT cpm 用起来咋样呀?去 Github 逛了圈, star 挺多
    BOYPT
        18
    BOYPT  
       Mar 2, 2016
    @congeec 不知道呀~我又不写 Cxx
    只是想说包管理是趋势,应该最终大家都差不多。
    neoblackcap
        19
    neoblackcap  
       Mar 2, 2016
    @congeec C/C++的包管理并没有什么用,若是真有用的话,那它就不应该叫 CPM ,而是 apt,yum 。你想想嘛, C/C++写那么多东西都是平台相关的,那么这个包管理的意义何在?还是一样的自己管理啊,而且 C/C++各种编译方法啊,有的库用 CMake ,有的是 GNU Make 。
    C++换个编译器都会报错,不同的 STL 会不兼容。因此我觉得 C/C++这些语言的包管理意义真不大。
    raptor
        20
    raptor  
       Mar 2, 2016
    python 的 virtualenv+pip+requirements.txt 早就实现了,即使是 py2/3 分裂也一样可以解决,不知道楼主所说的有什么可追的。
    congeec
        21
    congeec  
       Mar 2, 2016 via iPad
    @neoblackcap 也是啊,系统级的包管理就够了。不过 clib 是个很好的补充
    lxy
        22
    lxy  
       Mar 2, 2016
    virtualenv --no-site-packages venv
    pip install -r requirements.txt
    完美。
    ivenvd
        23
    ivenvd  
       Mar 2, 2016
    @neoblackcap 包管理的意义不限于此吧,一个很重要的功能是锁定依赖版本,为开发者提供统一的开发环境。比如开发者有人用 OS X ,有人用 Ubuntu ,有人用 Arch (尤其开源项目中,这种情况很常见),使用系统的包管理器显然是不合适的。
    kfll
        24
    kfll  
       Mar 2, 2016
    这个包管理工具能分组依赖么?
    bundler 能

    这个包管理工具靠什么稳定版本?
    npm: 我们有 semver ,我们靠约定;我们有 shrinkwrap ,但是咱才不要默认打开,打开了咱也不打算做校验,而且为了酷炫,咱跑一次 shrinkwrap 变一次 npm-shrinkwrap.json ;
    其他包管理工具:我们自动锁定版本,校验哈希。
    Tink
        25
    Tink  
    PRO
       Mar 2, 2016
    讲道理 virtualenv+pip 很好用啊
    XIVN1987
        26
    XIVN1987  
       Mar 2, 2016
    virtualenv+pip ,在学 Flask 就这么用
    neoblackcap
        27
    neoblackcap  
       Mar 2, 2016
    @ivenvd 托管语言大多数基于自身的虚拟机,那已经抹平了系统差异,那么其专有的包管理器的确有存在的必要。但是 C/C++这些本身就在造轮子,写特定平台的。若是要写起包管理器,出来的效果跟我们平常用到的也是很大差别的。

    比如,到最后开发者还是得装了 6 个版本的 C++编译器以及对应 10 个版本的 STL 库。包管理完全没有实现统一开发平台的作用!最后还因为不同的库编译器不一样而头痛。
    hitmanx
        28
    hitmanx  
       Mar 2, 2016
    @BOYPT c++没有什么好用的包管理吧.我记得还看过视频,在微软每年举办的 c++的一个 camp 上, Bjarne Stroustrup\Scott Meyers 等等都在台上,自由问答环节,下面有人提问说为啥 c++没有 pip 啊,然后台上的几位 bla bla 说了一堆,具体说了啥忘了,总而言之就是现在没有,将来再说吧
    janxin
        29
    janxin  
       Mar 2, 2016
    楼主不要给 nodejs 招黑啊...
    BOYPT
        30
    BOYPT  
       Mar 2, 2016
    @hitmanx 包管理的概念其实很广泛,最终目的就是为了方便开发者,另外一个目的就是互通有无,这不是语言设计者 /引导者该插手的事。

    楼上那些还拿平台来说事,像 arduino 只开发 AVR 平台的 C/C++,早就有包管理。

    反正包管理是趋势,现在有,以后更加有而且更加好,你用还是不用都那样了。
    hxtheone
        31
    hxtheone  
       Mar 2, 2016
    第二点个人觉得利弊兼得吧, 隔离各个项目的依赖是挺好的, 但是每开一个项目就得下一堆包下来, 遇到网不好的时候真是心累

    讲道理 bundler 真的是我用过最好的包管理工具没有之一
    bboyliu
        32
    bboyliu  
       Mar 2, 2016
    @sudoz My precious,

    I just want to know the answer.

    But, You are so rudy. I hate you, Baby!
    slideclick
        33
    slideclick  
    OP
       Mar 2, 2016
    @lxy 谢谢!
    sudoz
        34
    sudoz  
       Mar 2, 2016
    @bboyliu ‘ rudy ’ or ‘ rude ’? 笑哭,你的 english 真 poor ,小心斧子砸自己脚面上
    kkhaike
        35
    kkhaike  
       Mar 2, 2016
    npm 的目录套真是叼
    hienchu
        36
    hienchu  
       Mar 2, 2016
    V2 不是英语角:P
    ivenvd
        37
    ivenvd  
       Mar 2, 2016
    @neoblackcap 操作系统自带的包管理器,也没需要你装 6 个版本的 C++ 编译器以及对应 10 个版本的 STL 库啊。编译型语言的包管理器确实限制多些,但是写个常规软件,一个 C++ 编译器应该还是够用的吧。

    另外「托管语言」?第一次听到这个说法,查了一下貌似是 .Net 相关语言的意思?
    bboyliu
        38
    bboyliu  
       Mar 2, 2016
    @sudoz You are so young.
    neoblackcap
        39
    neoblackcap  
       Mar 2, 2016
    @ivenvd 托管语言这个我还以为只要是有虚拟机的都是这样叫。反正我的意思就是指类似 java 或 C#这样的语言。

    简单的项目是简单的项目,但是包管理必然是通用的嘛。复杂的问题解决不了,只能解决简单的,那么这个完全没有推广价值。最多这个世界上会再多一种包管理器而已。

    若是要问我支不支持,我说一定支持,不过仅仅为了下载源代码的话,我为什么还要去学习一套新的包管理器的操作?编译,依赖还是要我人肉去解决,然后却说这个包管理器很好?

    若是要说是源代码代码分发平台,仅仅用来交流的话那显然是有一个统一的平台好。但是交流平台就说交流平台,不要尝试包装成包管理嘛,明明包管理就没做好。

    公司内部的话,我建议可以如轮子哥所说一样,仿照微软,什么都往版本库里面放,只要一 check out 那么就可以编译了。包管理什么的完全是在开发阶段人肉解决。
    Mutoo
        40
    Mutoo  
       Mar 2, 2016
    virualenv 还能解决多版本 python 隔离呢, node.js 怎么做?
    Mutoo
        41
    Mutoo  
       Mar 2, 2016
    @Mutoo 查了一下对应的工具叫 nvm
    wuyadong
        42
    wuyadong  
       Mar 2, 2016
    python 的开发环境 /包管理 很吊的好嘛!
    lovedboy
        43
    lovedboy  
       Mar 2, 2016
    不是甩了几条街嘛==
    glasslion
        44
    glasslion  
       Mar 2, 2016
    @sudoz 我司还有人把同事的英文名 Ruby 打成 Luby 的。高大上小清新顿时沦为 loser 屌丝气
    doubleflower
        45
    doubleflower  
       Mar 2, 2016
    python 的包管理当然比不上 npm 。还好 python 不象 nodejs 那样一个函数就搞个包,基本上一个项目没多少包,所以才能管得过来。
    neo1218
        46
    neo1218  
       Mar 2, 2016
    说实话, PYPI 官网太难看了,比不上 npm 的。
    firemiles
        47
    firemiles  
       Mar 2, 2016
    @neo1218 人家搞 js 就是专门建网站,门面当然好看。
    tt0411
        48
    tt0411  
       Mar 2, 2016
    @neo1218 https://warehouse.python.org/ 不久就会漂亮了
    glasslion
        49
    glasslion  
       Mar 2, 2016
    @tt0411 我第一次听到这话, 差不多是在 3 年前
    meteor957
        50
    meteor957  
       Dec 2, 2018
    感觉没有==
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3047 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 212ms · UTC 08:09 · PVG 16:09 · LAX 01:09 · JFK 04:09
    ♥ Do have faith in what you're doing.