Pipenv: Yarn + Pyenv 的组合, requests 作者的新作

2017-01-23 14:05:05 +08:00
 Gem
终于等来了这个工具,不用羡慕 node 里的 Yarn 了,也不必嫌 Pyenv 的单薄了。这个东西不用多介绍了,想必大家都懂的。
https://github.com/kennethreitz/pipenv
3958 次点击
所在节点    Python
21 条回复
sudoz
2017-01-23 14:37:33 +08:00
真大神
jason0916
2017-01-23 16:02:09 +08:00
因为一直在关注他,也看到了这个项目,其实不是很明白特意写一个包的好处,楼主能帮忙介绍下嘛 0- 0 ?
gotounix
2017-01-23 16:04:23 +08:00
这哥们的代码写的真漂亮,值得每一个 Python 开发者学习啊。
NSDont
2017-01-23 16:23:54 +08:00
@jason0916 我觉得主要是那个 Pipfile.lock 文件,保留了你开发环境下面所有的 package 的版本 https://github.com/kennethreitz/pipenv/blob/master/Pipfile.lock
upczww
2017-01-23 16:34:21 +08:00
好东西,可以少敲好多代码
yongzhong
2017-01-23 16:35:30 +08:00
大神有个 organization 叫 the white house
jason0916
2017-01-23 17:20:26 +08:00
@NSDont requirements.txt 也可以指定版本啊 0- 0 ,有别的嘛?
lalalakakaka
2017-01-23 18:18:06 +08:00
虽然只是把 virtualenv 和 pip 的命令合二为一了。。。

但是想想真的会很好用啊
bdbai
2017-01-23 19:26:46 +08:00
@jason0916 lock 精确保留每个库的版本,不更新依赖版本就不会变,避免各种不兼容问题。
66450146
2017-01-23 20:12:28 +08:00
@jason0916 很多包管理现在的做法是,在指定需要什么包的时候不用指定版本,第一次安装的时候进行依赖解析并生成 .lock 文件保存准确版本,这样在其他环境下安装的时候会直接到 .lock 文件里面找到每个包的准确版本来安装,同时不会给开发人员带来版本管理的负担
hugo775128583
2017-01-23 20:35:25 +08:00
平时使用 conda 做虚拟环境,不知道这位大神的工具和 conda 的区别和优势在哪里?目前用 conda 还没有觉得有蹩脚的地方。
jason0916
2017-01-23 20:48:37 +08:00
@66450146 哦哦这样子,谢谢科普~
jason0916
2017-01-23 20:48:51 +08:00
@bdbai 嗯嗯,谢谢科普
fxxkgw
2017-01-23 21:07:41 +08:00
敢不敢好好靠脸吃饭啊 =。=
congeec
2017-01-23 21:23:06 +08:00
Python 也需要一个这样的东西了。 bundle, cargo 类似
aec4d
2017-01-23 22:13:19 +08:00
初略看了下,虽然名字都有 env ,可是这个库和 pyenv 是没有一毛钱关系的,也没有整合
aec4d
2017-01-23 22:25:05 +08:00
另外 pyenv+virtualenv 的组合基本没有太大毛病。 pipfile 文件解决在 dev 和 prod 多个环境中安装包略有不同,并没有很惊艳的效果,总结来说现在已有的方案能解决问题。这个库只是想让做的方法更好一点点而已
Gem
2017-01-23 22:26:09 +08:00
@aec4d 应该是目前还不完善, pipenv --two/three 这个参数目前不起作用,可能也是我的使用方法不对。
lightening
2017-01-24 17:49:44 +08:00
@jason0916 插件管理有两个作用,一个是说明需要装的插件,一个是解决依赖并锁定插件版本。
传统上的 requirements.txt 兼具了这两个作用。但是有一个问题,依赖关系和版本锁定非常复杂,手写的话不仅非常麻烦,而且很容易出错。所以有 pip freeze 功能。但是 pip freeze 功能又有一个问题,就是他把系统上所有安装的包都给 freeze 下来了:有些是你其他 project 的包,有些是你临时装了 debug 用的、或者是一些命令行小工具,你不想放进 repository 的。

Virtualenv 是一个解决方法。至少其他 project 的包不会进来了。但是这样的话,不同 project 需要安装好几次一样的包,浪费空间。另外,临时的 debug 工具这种情况,还是会被 freeze 下来。


以 Ruby 的 Bundler 为代表,把“说明需要装的插件”功能和“解决依赖并锁定插件版本”功能分开了。分为 Gemfile 和 Gemfile.lock. 前者格式非常简单,并且可以方便的指定人为限定的附加信息如:我需要 Rails 这个包,> 4.0 版本。这个文件手动编辑。另一个 lock 文件,是自动生成的,比如精确到 Rails 4.2.1 版本。在第一次 bundle install 时,系统把能够满足依赖关系的精确版本记录在 lock 文件里,其他开发者使用、部署的时候就会用完全一模一样的版本,避免莫名其妙的问题。

同时,同一台机器上即使有多个 project ,也不需要把同一个包装好几遍了。 Ruby 的 bundler 在使用时,可以在系统内多个版本的同一个包中,只读取 lock 文件制定的精确版本。甚至可以 Bundle.require 一次性 load 所有包。
jason0916
2017-01-24 19:55:37 +08:00
@lightening 谢谢科普,终于有点明白优势在哪里了,谢谢谢谢

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

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

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

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

© 2021 V2EX