1

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

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

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

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

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

4

1 回答 1

1

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

为了让 python 找到你的./bar.py模块或./foo包,当前目录也需要是 python 路径的一部分。我发现为 找到了一个模块,而没有找到包,这让我感到非常惊讶;显然,这两个部分的 python 路径是不同的。您可以查看生成的和脚本的顶部以查看已添加的路径。bar.pybin/bar./foobin/barbin/foosys.path

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

[foo]
recipe = zc.recipe.egg
eggs = ${buildout:eggs}
extra-paths = ${buildout:directory}
entry-points = foo=foo:main
于 2011-05-04T19:24:28.250 回答