构建:使用“包”作为入口点?

时间:2011-05-04 12:03:42

标签: python buildout

我的项目中有一个名为./foo的目录,其中包含一个__init__.py文件,其中包含一个名为main()的方法。

我想使用buildout来创建一个执行main()方法的可执行文件(例如:./bin/foo)。我使用以下buildout.cfg部分在我的目录结构的“顶层”实现了类似的功能:

[bar]
recipe = zc.recipe.egg
eggs = ${buildout:eggs}
entry-points = bar=bar:main

这适用于我的./bar.py文件,可创建可执行文件./bin/bar。我似乎无法让它适用于./foo/__init__.py文件。

我怎样才能实现上述目标?

1 个答案:

答案 0 :(得分:1)

通常,python通过python路径通过sys.path变量查找模块和包。当buildoutbin/目录中创建脚本时,它会添加到sys.path变量,列出给定部分的所有鸡蛋。

为了让python找到你的./bar.py模块或你的./foo包,当前目录也需要部分python路径。我发现非常令人惊讶的是,找到了bar.py的{​​{1}}模块,而找不到bin/bar包。很明显,这两个部分的python路径是不同的。您可以查看生成的./foobin/bar脚本的顶部,以查看已添加到bin/foo的路径。

在任何情况下,您都可以使用sys.path部分中的sys.path选项手动添加extra-paths的其他路径。其中列出的任何路径都将以生成的脚本结束。只需将其设置为zc.recipe.egg即可:

${buildout:directory}