问题描述
有没有一种简单的方法可以使用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很好地编写的。我最终得到:
$ {buildout:directory} /eggs/scons-2.0.1-py2.6.egg/
$ {buildout:directory} /eggs/scons-2.0.1-py2.6.egg/scons-2.0.1/
$ {buildout:directory} /eggs/scons-2.0.1-py2.6.egg/scons-2.0.1/SCons/
$ {buildout:directory} /eggs/scons-2.0.1-py2.6.egg/EGG-INFO/scripts/
如果(2)在PYTHONPATH上并且(4)的内容已复制或链接到bin目录,则此方法有效。
理想情况下,我想将此安装为鸡蛋,以利用我的全局鸡蛋目录;我不想拥有同一构建工具的多个副本。是否可以使用现有食谱来实现此目标,还是应该编写自己的食谱?
编辑:我做了一个个人副本,并修改了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/
不知道我是否要继续朝这个方向前进。
解决方法
天啊。我查看了SCons的setup.py,这有点混乱。在Mac上安装时,它甚至顽固地仅安装在ѭ3中。它当然不适合与setuptools(因此与zc.buildout)一起使用。
您可以使用
zc.recipe.command
和${buildout:executable} setup.py
运行setup.py脚本并将其配置为安装在parts
子目录中,然后使用单独的部分将所有脚本符号链接到bin/
中:
[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}
因此,我们完全忽略了setuptools,不构建鸡蛋,而是下载tarball,手动运行setup.py
,然后对有趣的部分进行符号链接。