Pipenv 到底解决了什么问题? - V2EX
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
ifoolish
V2EX    Python

Pipenv 到底解决了什么问题?

  •  
  •   ifoolish 2018-06-08 17:31:16 +08:00 7536 次点击
    这是一个创建于 2695 天前的主题,其中的信息可能已经有所发展或是发生改变。

    只是把 virtualenv 和 pip 结合成一个命令让使用更加方便?

    区分开发与生产依赖?写两个不同的 requirements.txt 也可以区分啊。

    那么 Pipenv 到底解决了 Python 包管理中的什么痛点?能否举个具体场景的栗子

    第 1 条附言    2018-06-09 01:02:02 +08:00

    下面一位 Pipenv 维护者的回复让我了解到了一件事,虽然 node 社区里大家都吐槽 npm 的依赖目录树设计导致了 node_modules 目录过深多大的问题,但是 npm 的这个设计解决了多个包依赖同一个包的不同版本的问题。而这是目前 Python 的包管理尚未做到的事 :doge

    19 条回复    2018-10-22 15:38:03 +08:00
    66450146
        1
    66450146  
       2018-06-08 17:45:25 +08:00
    库版本更新啊,不搞一个单独的 .lock 文件更新一次依赖要掉一层皮
    jennifertxwoodma
        2
    jennifertxwoodma  
       2018-06-08 17:49:11 +08:00
    解决了不会敲 pip freeze >> requirements.txt 的人的痛点,
    充分说明了技术界还是要会吹
    fy
        3
    fy      2018-06-08 17:55:30 +08:00
    解决了 locking 太慢,python 程序员不能像大型 C/CPP 项目以等待构建为借口摸鱼的问题。
    est
        4
    est  
       2018-06-08 18:00:05 +08:00
    解决了 NIH 症状。
    kunluanbudang
        5
    kunluanbudang  
       2018-06-08 18:07:38 +08:00 via Android
    使用了一段时间,粉转黑了

    simpleapples
        6
    simpleapples  
       2018-06-08 18:15:01 +08:00
    说一个平时时常用到的 pipenv shell 比 source venv/bin/activate 要方便很多
    tonghuashuai
        7
    tonghuashuai  
       2018-06-08 18:25:07 +08:00
    你的服务器上部署着三个 web 服务,第一个服务是你的前同事写的,需要 tornado 4.0.3,第二个服务是你写额,需要 tornado 4.3.0,第三个服务是你的另外一个同事写的,需要 tornado 5.0,只有一台服务器的情况下,就可以用 virtualenv 了
    twor
        8
    twor  
       2018-06-08 18:29:19 +08:00
    @tonghuashuai virtualenv 不就是在同一台服务器解决这个问题的吗
    doubleflower
        9
    doubleflower  
       2018-06-08 19:02:15 +08:00
    @simpleapples 一个 alias 就解决的事用不着一个软件吧
    chroming
        10
    chroming  
       2018-06-08 20:04:37 +08:00
    方便且稳定就是进步了
    0bit
        11
    0bit  
       2018-06-08 22:26:18 +08:00
    就是 Python 的 npm
    uranusjr
        12
    uranusjr  
       2018-06-08 22:35:35 +08:00   23
    基於完整揭露原:我是 Pipenv 三位目前的主要者,同其部份依。Pipenv PyPA 有格,也不者成有任何束,因此以下是我人的,法代表 Python 官方意。然而,我我的看法 Python 核心社群的普遍共一致。「 Pipenv 解什」容易人落入,因 Pipenv 本上包含了不直接相的部份:Pipfile ,以及 Virtualenv 操作。Pipenv 在部份都解有方案的,但是必分看,才能正它。

    Pipfile 的目是取代在常使用的 requirements.txt 格式,引入 lock file 概念(或者叫做 shrinkwrap )。和 pip freeze 最大的差是,lock file 是一理上的依,而 pip freeze 是生上的依。你使用 pip freeze ,只是已安的套件「倒」出。你 locking 行,是直接取用套件的 metadata,直接建立套件的依果。在理上是有副作用的行(然上套件在期有什副作用是完全未知的,有法),所以只要依本身有改(例如有更新),每次 locking 的行完全相同。在依解析上是重要的特性,有趣的人可以自行研究,不述。

    上面的法可能你 Pipfile 的步在於一更好的依解析格式行,但其不是如此。它提供的是依解析件事情「本身」因概念在 pip 中根本不存在。考以下的:你的案使用了套件 A 套件,它依於套件 B 的 2.x 系列。你的 requirements.txt 可能:

    A==1.0
    B==2.5.1

    在你想要作新功能,而加入套件 C,而它依 B 套件 3.0 的 API。在使用 pip 的下,你 pip install C。由於 pip 本身有依解析功能,它只知道要安 C,以及其依 B 3.0,於是你的 freeze 果成:

    A==1.0
    B==3.0.0
    C==1.0

    候 A 很可能法使用,而你也已失去了前一,必重新建立你的境。但是更可能的是,如果你有完整的制,不定完全不件事情,直到有人抱怨。

    另一方面,由於 Pipfile 有立的解析步,且不需要先套件安至境中,你 C 加入 Pipfile ,locking 就直接告知你依法被解析,防止後面的所有。且由於它只有在解析成功,才行安,你只要把 C Pipfile 移除,即可回到原本的案。

    基於同的理由,Pipfile 同也有一些其他好。如果你有平台的依,例如 Windows 使用 X 套件,在 Mac 使用 Y,然後一抽象之的需求,pip freeze 基本法理。Pipfile 因不需要把套件本身到境中,就可以理。

    在 Pipfile 之前,也有其他似功用的案,只是有提出全新的格式,而是沿用 requirements.txt 。piptools 是一比有名的例。不 Pipfile 的 TOML 格式 lock file 的 JSON 格式比起基於行的文字 requirements.txt 更有表能力,能理更泛的使用情境。

    回到 Pipenv,在境的使用上,它的新度就有 Pipfile 格式那高,只是一 virtualenv 的,唯一比值得一提的,只有 run shell 指令。Shell 前面有人已提到,比起 activate 要方便一些,因後者是直接修改你有的 shell 境,而 shell 是直接一 shell 子程序,所以跑起更乾,也不容易出。不年 terminal emulator 街跑,也有很多其他 workaround 做法,shell 充其量就是推的 best practice 更多人知道。Run 也是差不多,其就是自你 active-行指令-deactivate。非常方便,但有特解什。

    如果你 Pipenv 解了什,我而言,Pipfile 格式它提供的 locking 才是重,境管理我自己一也不什力(我加入 Pipenv 之前就,在是有自己),其什。但是 Pipenv 使用者而言,每天用到的都是境的介面,套件管理根本用不到次,更注意到它的技差,所以看它的境指令,得好像可有可也是合情合理,我者也都很清楚,所以我最近(大是今年 PyCon US 起,到在大一月)努力的方向,就是可能把 Pipenv 的各件拆分成立的套件,鼓大家根些套件建自己的工具,些技能正地被。

    Pipenv 的初始作者是 Kenneth Reitz,我想大家都很清楚。Kenneth 最突出的技能,是一工作流程流、用、完整的介面,如果你有密切注他往的案,例如 Requests Records,能很明察。然而在流介面,有候就免不了牲技上的粹性:Requests 的 json() 函式 Records 的 Pandas 整合都是十分明的例子。在案中,HTTP SQL 基本都是用相成熟的用,所以大家也比能些功能的,以及函式的定位,但套件管理在 Python 社群,甚至整程式社群中,就不是那普遍的知,因此你把很多技混在一起,大家就很最成果。有令人憾,不也是我接下最重要的努力目。希望的解能大家更理解套件管理依解析,而能理解,甚至助建立 Pipenv 的正定位。
    wenbinwu
        13
    wenbinwu  
       2018-06-08 22:37:46 +08:00
    @uranusjr 先回复再拜读
    SuperMild
        14
    SuperMild  
       2018-06-08 22:54:00 +08:00
    @uranusjr 高质量内容!
    laike9m
        15
    laike9m  
       2018-06-08 23:25:15 +08:00
    @uranusjr 怎么看 Poetry 作者指出的 pipenv 解析依赖可能不成功的问题 ?
    https://github.com/sdispater/poetry#what-about-pipenv
    ifoolish
        16
    ifoolish  
    OP
       2018-06-08 23:36:38 +08:00
    @uranusjr #12 感谢你的耐心回复。而且终于见到了个具体的例子。但是如你所说的例子,即 Pipfile.lock 还是无法解决 A 和 C 依赖 B 的不同版本的问题吗?只是检测到依赖冲突后做出提示并阻止安装而已?
    uranusjr
        17
    uranusjr  
       2018-06-08 23:43:24 +08:00
    @laike9m 解析依本就有很多能出的地方,Poetry 的依解析也莫名的不成功,我得有空吵不如大家努力找 bug 修它。前面提到的件立工作也有部分考量到,如果能把解析件立出,各工具就能自行插拔合出合的介面,不用像 Pipenv Poetry 各自重新造子,各有各的,法互相助。外 Python 依解析有硬是套件於混,setup.py 是可怕的史,Pipenv 目前 locking 慢有部份也是因素(然有化空,我目前有一些方向,希望月能再改善)。
    uranusjr
        18
    uranusjr  
       2018-06-08 23:47:19 +08:00
    @ifoolish 以 Python 目前的就是法解了,只能阻止安。核心者有提出一些方案,不有明,作上也不容易。如果有相知,尤其於不同依版本有解法的工具(如 Bundler NPM )者,迎到 Python 的 SIG mailing lists ,我很需要知的助。
    dcoder
        19
    dcoder  
       2018-10-22 15:38:03 +08:00
    @uranusjr @ifoolish
    我就问个最简单粗暴的问题, 在大多数时候, pipenv 到底能不能完美地复制一个开发环境?
    比如我用 Mac 在本地做完了开发, 想 deploy 到 AWS, 用 Pipfile.lock 就能完美复制本地环境,
    保证无错地在 AWS 的 Linux server 上跑起来么? 哪种情况下会出错, 是 pipenv 用户需要避免的?

    另外, 假设我每次在本地 Mac 更新开发配置, 有没有 reliable 的流程 push 更新到我 AWS server 上?
    如果可以的话,就可以用 pipenv 来做自动部署了. 有没有人这么做? 一定程度代替 docker?

    从 pipenv 官网上看, 其设计思路是, 要查看被依赖包的 hash 的, 类似 Nix ( https://nixos.org/nix/)
    所以它解决的问题,应该是可靠地 produce deterministic builds 环境.
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1386 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 16:52 PVG 00:52 LAX 09:52 JFK 12:52
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86