Python 的包管理感觉怎么这么不优雅。。。

2018-01-03 23:00:14 +08:00
 serge001

本人前端一枚,习惯了 node 的 npm 之后感觉配置和使用起来都很简单方便,最近学习了一点 python 后,感觉 python 的包管理怎么这么不优雅。首先,配置文件居然是用 txt 文件来写的,二进制文件我用编辑器是无法打开的,然后用 git 也不能很好的版本管理;其次,pip install 是把包全都装在了全局,打开用户目录,一大堆以点开头的文件夹,抓狂。。。

19476 次点击
所在节点    Python
120 条回复
scriptB0y
2018-01-03 23:55:42 +08:00
Python 的打包确实是比较复杂,你可以看看这个 template: https://github.com/kennethreitz/setup.py

但是你后面的结论就不对了:

> 配置文件居然是用 txt 文件来写的

不知道什么意思……文件要么二进制文件要么文本文件,txt 是什么?

> 二进制文件我用编辑器是无法打开的

这是你编辑器的问题。况且你为什么要用编辑器打开二进制文件?你期望看到什么?

> 然后用 git 也不能很好的版本管理

我假设你说的是管理依赖?一般写到 requirements.txt 里面,手动写更容易控制版本和依赖。

> pip install 是把包全都装在了全局

用 virtualenv,python 的环境可以非常干净的

> 打开用户目录,一大堆以点开头的文件夹

你说的点开头的文件是什么?就算装到系统里面,也是在 site-package 里面。

------

最后多说一句,少抱怨,多去 Stack Overflow 找找解决方案。我向你保证 Python 的依赖可以处理地很干净的。比起 JavaScript 来坑少很多了。

贴点资料: https://www.kawabangga.com/how-to-learn-python
brucezz
2018-01-04 00:14:45 +08:00
Kilerd
2018-01-04 00:51:44 +08:00
你怕不是没遇到过这种情况咯。

JavaScript 莫名奇妙不工作,然后把 nodule_modules 文件夹删了,然后再 yarn 一下就可以了。 依赖库完全没改变。 神奇吧。
feather12315
2018-01-04 00:55:41 +08:00
为啥要 pip 安装?能不 pip 就不 pip 啊,安装源里的多好
quinoa42
2018-01-04 01:18:50 +08:00
什么二进制文件需要用编辑器编辑还得用 git 管理……
nicevar
2018-01-04 01:35:22 +08:00
node 和 python 半斤八两,开源的项目都是一堆 issue 都是跑不起来的,全死在版本上
congeec
2018-01-04 01:48:49 +08:00
Do one thing, do it well. 这是 unix 的哲学,是传统,pipenv, pyenv 啥的还算好用

npm 那种啥都能干的工具才是异端

很多 linux 新手跟我抱怨 Linux 真难用,那是因为他们爸 Linux 当 windows 用。你那 pip 当 npm 用,自然要吃瘪
ysc3839
2018-01-04 01:48:59 +08:00
一堆点开头说明你用的是 Windows 吧,手动隐藏就好了啊。
hsuan
2018-01-04 01:49:41 +08:00
@feather12315 不用 pip 用啥?
PythonAnswer
2018-01-04 01:50:52 +08:00
现在自带 venv 了 还算高级。

多看说明书,都有最佳操作的。
param
2018-01-04 02:10:13 +08:00
Python 的包管理很科学,npm 的包管理才是非常不科学。
即便这样,我在 ArchLinux 上还是用 pacman 来装 Python 包,这样就能随着系统更新而滚动更新。官方源+archlinuxcn 源+AUR 覆盖了我大部分需要的包,剩下的用 pip install --user 来安装。
至于 virtual env 的话,也只适合在开发环境用,针对特定项目使用,日常使用并不需要那么搞得复杂。如果你在对付一个老项目并且有大量的坑填不过来,那么就用它来维持一些旧版本的库吧,否则的话还是建议把所有的库更新到最新。
param
2018-01-04 02:14:26 +08:00
npm 的项目,经常指定库版本,不同的项目就需要不同的版本,而不是大家都有一个共识去适配最新版。这样导致了本地安装就必需要多版本共存,也做不到很好的复用,全局共享一个库就变得没有太大意义了。
param
2018-01-04 02:24:19 +08:00
我使用 Archlinux,其中一个原因也是他们把所有包都更新到最新,避免了我以前使用 debian/fedora 的那种 Dependency hell,摆脱了大量为了照顾老项目而影响体验的历史遗留问题。
与此同时,npm 的依赖版本写死不更新却成为一种共识,有点可悲。
PythonAnswer
2018-01-04 06:45:33 +08:00
conda 一次安装 基本都够用了。
huangunic0rn
2018-01-04 07:46:33 +08:00
蛤蛤 npm 居然嘲笑 pip 🙈
jingniao
2018-01-04 08:03:24 +08:00
pip 已经挺好了……
当然在一些依赖传递时可能会有一些冲突,不过没碰到过
你让 go 怎么活?官方软件包管理工具的难产……
zachguo
2018-01-04 08:18:47 +08:00
python 的包管理就不要洗了,公认的很糟糕了。要是涉及到 numpy 之类 cbinding,打包那可是各种 hack。
不管 npm 还是 yarn 都比 pip 强,deploy 的话有个 Dockerfile 和 npm i 就不会出问题; python 就看运气了,即便 docker、conda/venv 用上了还会有幺蛾子。
之前 deploy 一个 ML 的 service,必须把 numpy 从 requirements.txt 里拉出来单独跑一遍 pip install 才行,逗我。
Acebiu
2018-01-04 08:21:05 +08:00
至少比 npm 问题少多了,npm 是真的迷。(怨气满满的说道。
blless
2018-01-04 08:37:27 +08:00
@zachguo numpy 是有点奇葩,而且其实你真的要用其实还要装一些 openblas 还有其他 intel cuda 加速模块。我们都是用 docker 直接做一个通用基础镜像。
klgd
2018-01-04 08:45:44 +08:00
@Kilerd #3 多么痛的领悟啊,我就经常这么干

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

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

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

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

© 2021 V2EX