在 Plone 构建设置中查找需求规格

Find requirement specs in a Plone buildout setup

我有一个 Plone 站点(大约 4.2.4,从根目录中的 version.txt 得知)我想更新到最新版本(我发现 this how-to) (截至目前,4.3.4);我继承了大量未记录且可能已过时的固定版本。

当注释掉我的 versions.cfg 时,改用 http://dist.plone.org/release/4.3-latest/versions.cfg 并用 -vvv 重新 运行 buildout,我得到:

Develop: '.../src/collective.mathjax'
in: '.../src/collective.mathjax'
/tmp/tmpbXsnpD -q develop -mxN -d .../develop-eggs/tmp2yhe9ubuild
...
Installing 'zc.recipe.egg'.
We have the best distribution that satisfies 'zc.recipe.egg<2dev'.
Picked: zc.recipe.egg = 1.3.2
...
There is a version conflict.
We already have: zc.recipe.egg 1.3.2.
While:
  Installing.
  Getting section test.
  Initializing section test.
  Installing recipe zc.recipe.testrunner.

所以好像对zc.recipe.egg的sub-2版本有一些要求,但我找不到。 (在我的 versions.cfg 中,它被固定到 2.0.1 - 令人惊讶的是,它曾经有效。)

我用 findgrep 搜索了树,在 version*.cfgsetup.py 文件中寻找 rc.recipe.egg,但我找不到任何东西但是在我的项目根目录中。我什至搜索了 .../src/collective.mathjax 下面的每个文件,但都没有成功。

我怎样才能找出这种依赖关系?谢谢!

依赖项可能在第 3 方蛋中(因此:其中没有 setup.py)。在 ./eggs/*/EGG-INFO/requires.txt 中再次搜索(如果您的 egg 目录在构建根目录中)。

可能是因为您的扩建配置没有寻找更新的版本(如果您已经在本地安装了更新版本)。应该有这样一行:

newest = false

您可以尝试删除本地缓存的 eggs 或明确设置为不使用全局缓存并使用特定缓存(空)。

类似于:

[buildout]
eggs-directory = /home/USER/SOMEWHERE/eggs
download-cache = /home/USER/SOMEWHERE/downloads
extends-cache = /home/USER/SOMEWHERE/extends

您可以使用 "eggdeps"(在 pypi 中搜索它)来获取构建中所有依赖项的树 - 也许这会有所帮助。 将鸡蛋添加到您的构建中并重新运行构建。在进行您提到的更改之前,请在您原来的、有效的扩建配置上执行此操作。 (生成 eggdeps 脚本需要 buildout 才能成功完成)。

将此添加到您的构建配置中:

parts +=
    eggdeps

...

[eggdeps]
recipe = zc.recipe.egg
eggs = tl.eggdeps
       ${instance:eggs}
scripts = eggdeps

运行 再次扩建。 现在你有一个脚本 bin/eggdeps,它打印所有依赖项的树。 运行它:

./bin/eggdeps -n

示例输出:

zope.app.pagetemplate 3.11.2
    setuptools 8.0.2
    zope.browserpage 3.12.2 ...
    zope.component 3.9.5 [hook] ...
    zope.configuration 3.7.4 ...
    zope.dublincore 3.7.0
        pytz 2013b0
        setuptools 8.0.2
        zope.component 3.9.5 ...
        zope.datetime 3.4.1 ...
        zope.interface 3.6.7 ...
        zope.lifecycleevent 3.6.2 ...
        zope.location 3.9.1 ...
        zope.schema 4.2.2 ...
        zope.security 3.7.4 ...
      [test]
        zope.annotation 3.5.0 ...
        zope.testing 3.9.7 ...
    zope.i18nmessageid 3.5.3 ...
    zope.interface 3.6.7 ...
    zope.pagetemplate 3.6.3 ...
    zope.schema 4.2.2 ...

但升级现有安装的更好方法可能是为要升级到的 plone 版本获取标准构建,然后将非标准鸡蛋添加到该构建中。最后将您的数据库和 blob 移至新安装,并按照升级指南进行操作。

基本上可以在三个地方查找版本固定:

1.) PyPi 上发布的 eggs 的 requires-files,如 Luca Fabbri 指出的那样,您可以像这样搜索引脚:

grep -r --include=requires.txt "dependency.to.search.for" path/to/eggs-cache

2.) development-eggs的setup.py文件,类似的可以搜索到:

grep -r --include=setup.py "dependency.to.search.for" path/to/dev-eggs-cache

3.) 配置文件的 [versions] 部分,在本例中 the version.cfg 通过它的 extends 选项和被拉出的选项也可能通过 extends.

指定更多配置

你很幸运,受人尊敬的 M. v. Rees 分享了一段关于如何获取所有 Plone 版本的所有固定的片段: https://gist.github.com/mauritsvanrees/99cb4a25b622479e7dc3