构建:使用“包”作为入口点?
问题描述:
我在我的项目中有一个名为./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
变量找到模块和包。当buildout
在bin/
目录中创建脚本时,它将添加到sys.path
变量中,列出给定零件的所有鸡蛋。
为了让python找到你的./bar.py
模块或你的./foo
包,当前目录也需要部分python路径。我发现它很令人惊讶的是bar.py
模块找到bin/bar
,而./foo
包未找到;显然这两个部分的Python路径是不同的。您可以查看生成的bin/bar
和bin/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