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

2016-03-02 09:16:43 +08:00
 slideclick
node.js 包管理的方便之处:
1.package.json 文件定义了全部依赖,可以一键安装全部依赖。
2.安装的依赖在项目本地目录下,不干扰别的项目,可以一键部署。

python 当前的包管理到这个水平了吗?做到第一条至少不难吧。
6417 次点击
所在节点    Python
50 条回复
congeec
2016-03-02 11:25:08 +08:00
@neoblackcap 也是啊,系统级的包管理就够了。不过 clib 是个很好的补充
lxy
2016-03-02 11:29:24 +08:00
virtualenv --no-site-packages venv
pip install -r requirements.txt
完美。
ivenvd
2016-03-02 11:36:24 +08:00
@neoblackcap 包管理的意义不限于此吧,一个很重要的功能是锁定依赖版本,为开发者提供统一的开发环境。比如开发者有人用 OS X ,有人用 Ubuntu ,有人用 Arch (尤其开源项目中,这种情况很常见),使用系统的包管理器显然是不合适的。
kfll
2016-03-02 11:54:32 +08:00
这个包管理工具能分组依赖么?
bundler 能

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

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

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

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

讲道理 bundler 真的是我用过最好的包管理工具没有之一
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
2016-03-02 14:08:20 +08:00
@lxy 谢谢!
sudoz
2016-03-02 14:10:03 +08:00
@bboyliu ‘ rudy ’ or ‘ rude ’? 笑哭,你的 english 真 poor ,小心斧子砸自己脚面上
kkhaike
2016-03-02 14:21:00 +08:00
npm 的目录套真是叼
hienchu
2016-03-02 14:23:35 +08:00
V2 不是英语角:P
ivenvd
2016-03-02 14:27:06 +08:00
@neoblackcap 操作系统自带的包管理器,也没需要你装 6 个版本的 C++ 编译器以及对应 10 个版本的 STL 库啊。编译型语言的包管理器确实限制多些,但是写个常规软件,一个 C++ 编译器应该还是够用的吧。

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

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

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

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

公司内部的话,我建议可以如轮子哥所说一样,仿照微软,什么都往版本库里面放,只要一 check out 那么就可以编译了。包管理什么的完全是在开发阶段人肉解决。
Mutoo
2016-03-02 16:04:57 +08:00
virualenv 还能解决多版本 python 隔离呢, node.js 怎么做?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/260395

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX