1
sudoz 2017-01-23 14:37:33 +08:00
真大神
|
2
JhZ7z587cYROBgVQ 2017-01-23 16:02:09 +08:00
因为一直在关注他,也看到了这个项目,其实不是很明白特意写一个包的好处,楼主能帮忙介绍下嘛 0- 0 ?
|
3
gotounix 2017-01-23 16:04:23 +08:00 1
这哥们的代码写的真漂亮,值得每一个 Python 开发者学习啊。
|
4
NSDont 2017-01-23 16:23:54 +08:00
@jason0916 我觉得主要是那个 Pipfile.lock 文件,保留了你开发环境下面所有的 package 的版本 https://github.com/kennethreitz/pipenv/blob/master/Pipfile.lock
|
5
upczww 2017-01-23 16:34:21 +08:00 via iPhone
好东西,可以少敲好多代码
|
6
yongzhong 2017-01-23 16:35:30 +08:00
大神有个 organization 叫 the white house
|
7
JhZ7z587cYROBgVQ 2017-01-23 17:20:26 +08:00
@NSDont requirements.txt 也可以指定版本啊 0- 0 ,有别的嘛?
|
8
lalalakakaka 2017-01-23 18:18:06 +08:00
虽然只是把 virtualenv 和 pip 的命令合二为一了。。。
但是想想真的会很好用啊 |
10
66450146 2017-01-23 20:12:28 +08:00 via iPhone
@jason0916 很多包管理现在的做法是,在指定需要什么包的时候不用指定版本,第一次安装的时候进行依赖解析并生成 .lock 文件保存准确版本,这样在其他环境下安装的时候会直接到 .lock 文件里面找到每个包的准确版本来安装,同时不会给开发人员带来版本管理的负担
|
11
hugo775128583 2017-01-23 20:35:25 +08:00 via Android
平时使用 conda 做虚拟环境,不知道这位大神的工具和 conda 的区别和优势在哪里?目前用 conda 还没有觉得有蹩脚的地方。
|
12
JhZ7z587cYROBgVQ 2017-01-23 20:48:37 +08:00
@66450146 哦哦这样子,谢谢科普~
|
13
JhZ7z587cYROBgVQ 2017-01-23 20:48:51 +08:00
@bdbai 嗯嗯,谢谢科普
|
14
fxxkgw 2017-01-23 21:07:41 +08:00
敢不敢好好靠脸吃饭啊 =。=
|
15
congeec 2017-01-23 21:23:06 +08:00 via iPhone
Python 也需要一个这样的东西了。 bundle, cargo 类似
|
16
aec4d 2017-01-23 22:13:19 +08:00
初略看了下,虽然名字都有 env ,可是这个库和 pyenv 是没有一毛钱关系的,也没有整合
|
17
aec4d 2017-01-23 22:25:05 +08:00
另外 pyenv+virtualenv 的组合基本没有太大毛病。 pipfile 文件解决在 dev 和 prod 多个环境中安装包略有不同,并没有很惊艳的效果,总结来说现在已有的方案能解决问题。这个库只是想让做的方法更好一点点而已
|
19
lightening 2017-01-24 17:49:44 +08:00 3
@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 所有包。 |
20
JhZ7z587cYROBgVQ 2017-01-24 19:55:37 +08:00
@lightening 谢谢科普,终于有点明白优势在哪里了,谢谢谢谢
|
21
sunwei0325 2017-01-24 22:16:00 +08:00
膜拜大神的 Github, 顺便看看他写的 Python guide, 大神!
|