zc.buildout
使用zc.recipe.egg
在<package>/bin/
目录上生成的脚本如下所示:
#! <python shebang> -S
import sys
sys.path[0:0] = [
... # some paths derived from the eggs
... # some other paths included with zc.recipe.egg `extra-path`
]
# some user initialization code from zc.recipe.egg `initialization`
# import function, call function
我无法在每个脚本中引入的sys.path
构造中找到以编程方式 预置路径的方法。这可能吗?
为什么:我有一个全局安装的python项目版本,另一个版本安装在本地(off-buildout树)。我希望能够在这两个版本之间切换。
注意:显然,可以使用zc.recipe.egg
/ initialization
属性添加类似的内容:
initialization = sys.path[0:0] = [ /add/path/to/my/eggs ]
但是,还有其他方法吗?额外的一点是一个例子!
答案 0 :(得分:1)
最后,我通过创建自己的构建配方来获得工作环境,您可以在此处找到它:https://github.com/idiap/local.bob.recipe。包含配方的文件是这个:https://github.com/idiap/local.bob.recipe/blob/master/config.py。在类构造函数中有许多特定于我们软件的检查以及一些额外的改进,但是不要为此烦恼。 “真肉(TM)”在该类的install()
方法上。它或多或少都是这样的:
egg_link = os.path.join(self.buildout['buildout']['eggs-directory'], 'external-package.egg-link')
f = open(egg_link, 'wt')
f.write(self.options['install-directory'] + '\n')
f.close()
self.options.created(egg_link)
return self.options.created()
这样就可以了。我的外部(基于CMake)包现在只需要与它构建的python包并行创建正确的.egg-info
文件。我可以使用上面的配方,使用特定的软件包安装,如下所示:
[buildout]
parts = external_package python
develop = .
eggs = my_project
external_package
recipe.as.above
[external_package]
recipe = recipe.as.above:config
install-directory = ../path/to/my/local/package/build
[python]
recipe = zc.recipe.egg
interpreter = python
eggs = ${buildout:eggs}
如果您想切换安装,只需更改上面的install-directory
属性即可。如果您希望使用系统范围内的默认安装,只需从recipe.as.above
文件中完全删除buildout.cfg
构造。 Buildout只会找到全局安装,无需任何额外配置。卸载也可以正常工作。因此,在构建之间切换将起作用。
以下是我们在此处使用的完整工作的buildout .cfg
文件:https://github.com/idiap/bob.project.example/blob/master/localbob.cfg
问题是:是否有更简单的方法来实现相同的外部食谱?
答案 1 :(得分:0)
嗯,你错过的可能是最有用的扩建扩展,mr.developer。
通常情况下,包裹,假设foo.bar
将在某些回购中,让我们说git。
您的扩建程序看起来像
[buildout]
extensions = mr.developer
[sources]
foo.bar = git git@github.com:foo/foo.bar.git
如果您的包中没有包,则可以使用fs
代替git
,请查看文档以获取详细信息。
激活“本地”版本由
完成./bin/develop a foo.bar
停用
./bin/develop d foo.bar
您可以使用mr.developer
执行其他一些操作,请查看它!