在ruby的gem bundler的启发下,试图更好地管理需求文件中的依赖关系
Pundler的Python项目详细描述
关于
pundler试图更好地管理python需求文件。
pundler的灵感来自ruby的宝石Bundler。
具体来说,目标是处理requirements.in或 requirements.txt进入类似于^{tt3}的冻结锁定文件$ 以及红宝石世界里的Gemfile.lock。
这样做的好处是你的要求 文件只指定特定依赖的对象的版本 这些依赖带来的依赖可以很容易识别 分开了。
例如,如果我安装了需求jinja2==2.7 还需要安装jinja2的依赖项markupsafe,但它会 安装。通过运行pundler,我得到了一个很好地固定的requirements.txt 只要需要,我就可以从“real”requirements.in重新生成 我真的很在乎改变。
例如,假设我在requirements.in:
a==1.0 b==2.0 c==3.0
如果我们包含这些包的依赖项,我们就有:
a==1.0 adep1==1.0 adep2==1.0 b==2.0 bdep1==2.0 c==3.0
假设我们最终将a升级到2.0版:
a==2.0 adep1==1.0 adep2==1.0 b==2.0 bdep1==2.0 c==3.0
在a==2.0中,不再需要依赖项adep1==1.0。如果我们有一个 所有版本都固定的需求文件不清楚依赖关系是否可以 现在被移除。
如果我们只是更新原始的requirements.in,我们就可以重新生成 完整的需求(作为requirements.txt)很明显 adep1==1.0不再是必需的。
用法
只需使用requirements.in:
在目录中运行pundlerpython setup.py develop pundler
pundler将处理该文件并创建一个requirements.txt 将所有包固定到特定版本和 清楚地确定什么依赖于什么包依赖于什么。
示例
给定以下requirements.example.in:
pyramid==1.4.2 jinja2 txtemplate
pundler将生成thisrequirements.example.txt:
# requirement 'pyramid==1.4.2' depends on: WebOb==1.2.3 pyramid==1.4.2 translationstring==1.1 repoze.lru==0.6 Mako==0.8.1 MarkupSafe==0.18 PasteDeploy==1.5.0 Chameleon==2.11 venusian==1.0a8 zope.deprecation==4.0.2 zope.interface==4.0.5 setuptools==0.6c11 # requirement 'jinja2' depends on: jinja2==2.7 markupsafe==0.18 # requirement 'txtemplate' depends on: genshi==0.7 #jinja2==2.7 twisted==13.0.0 #markupsafe==0.18 txtemplate==1.0.2 #zope.interface==4.0.5 #setuptools==0.6c11