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

问题描述:

我在我的项目中有一个名为./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文件工作。

我怎么能达到上述?

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

为了让python找到你的./bar.py模块或你的./foo包,当前目录也需要部分python路径。我发现它令人惊讶的是bar.py模块找到bin/bar,而./foo包未找到;显然这两个部分的Python路径是不同的。您可以查看生成的bin/barbin/foo脚本的顶部,查看添加到sys.path的路径。

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

[foo] 
recipe = zc.recipe.egg 
eggs = ${buildout:eggs} 
extra-paths = ${buildout:directory} 
entry-points = foo=foo:main