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
slideclick
V2EX  ›  Python

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

  •  
  •   slideclick · 2016-03-02 09:16:43 +08:00 · 6573 次点击
    这是一个创建于 3188 天前的主题,其中的信息可能已经有所发展或是发生改变。
    node.js 包管理的方便之处:
    1.package.json 文件定义了全部依赖,可以一键安装全部依赖。
    2.安装的依赖在项目本地目录下,不干扰别的项目,可以一键部署。

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

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

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

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

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

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

    讲道理 bundler 真的是我用过最好的包管理工具没有之一
    bboyliu
        32
    bboyliu  
       2016-03-02 14:03:24 +08:00
    @sudoz My precious,

    I just want to know the answer.

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

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

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

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

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

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