SCons作为zc.buildout中的一个鸡蛋

时间:2011-06-13 22:04:36

标签: scons buildout

有没有一种简单的方法可以使用zc.buildout将SCons安装为鸡蛋?我最初的想法是,因为它使用distutils我可以使用zc.recipe.egg安装它,并认为鸡蛋将以SCons脚本转到$ {buildout:directory} / bin的方式设置SCons被添加到PYTHONPATH。

[buildout]
parts = 
    python

[python]
recipe = zc.recipe.egg
interpreter = mython
eggs = 
    SCons == 2.0.1

不幸的是,我不认为SCons的setup.py是以这样的方式编写的,它与zc.recipe.egg配合得很好。我最终得到了:

  1. $ {附加件:目录} /eggs/scons-2.0.1-py2.6.egg /
  2. $ {附加件:目录} /eggs/scons-2.0.1-py2.6.egg/scons-2.0.1 /
  3. $ {附加件:目录} /eggs/scons-2.0.1-py2.6.egg/scons-2.0.1/SCons /
  4. $ {附加件:目录} /eggs/scons-2.0.1-py2.6.egg/EGG-INFO/scripts /
  5. 如果(2)在PYTHONPATH上并且(4)的内容被复制或链接到bin目录,这将起作用。

    理想情况下,我想将它作为一个鸡蛋安装,以利用我的全球egg目录;我不想拥有相同构建工具的多个副本。是否可以使用现有食谱来实现这一目标,还是应该编写自己的食谱?


    编辑:我制作了个人副本并修改了SCons的setup.py参数,以便创建一个scons入口点。我做的唯一更改:删除'cmdclass',添加'entry_points'。

    arguments = {
        'name'             : "scons",
     ...
        'scripts'          : scripts,
        'entry_points'     : {
                'console_scripts':
                    ['scons = SCons.Script:main']
                }
    }

    这种作品。它给了我一个bin / scons中的scons脚本,但不是sconsign,scons-time或scons.bat。我把它放在/ var / www / eggs中的tar中,并用apache服务。

    [buildout]
    parts = 
        python
    
    [python]
    recipe = zc.recipe.egg:scripts
    interpreter = mython
    eggs = 
        scons == 2.0.1
    find-links = 
        http://localhost/eggs/
    

    不确定我是否想继续这个方向。

1 个答案:

答案 0 :(得分:3)

哦,我的。我查看了SCons的setup.py,这有点乱。在Mac上安装时,它甚至只能在/usr/local中安装。它当然不适合与setuptools一起使用(因此也适用于zc.buildout)。

您可以使用zc.recipe.command运行带有${buildout:executable} setup.py的setup.py脚本,并将其配置为安装在parts子目录中,然后使用单独的部件将所有脚本符号链接到{ {1}}:

bin/

所以,我们完全忽略setuptools,不要建立一个鸡蛋,而只是下载tarball,手动运行[buildout] parts = scons [scons-download] recipe = gocept.download url = http://prdownloads.sourceforge.net/scons/scons-2.0.1.tar.gz md5sum = beca648b894cdbf85383fffc79516d18 [scons-install] recipe = plone.recipe.command command = ${buildout:executable} ${scons-download:location}/setup.py install --prefix=${buildout:parts-directory}/scons-install location = ${buildout:parts-directory}/scons-install [scons] recipe = cns.recipe.symlink symlink = scons scons-time sconsign symlink_base = ${scons-install:location}/bin symlink_target = ${buildout:bin-directory} ,然后符号链接有趣的部分。