setup.py 将顶级模块放在子目录中

setup.py put top level module in subdirectory

我有一个看起来像这样的项目:

tool.py
utils/
    tool2.py
    tool3.py

我想将它们捆绑到一个发行版中,以便我可以从命令行调用 tooltool2tool3。但是到目前为止,我无法弄清楚如何在不创建新的 utils python 模块的情况下使 setup.py 包含 utils/ 下的脚本。基本上我想在 setup.cfg 中执行此操作而不更改我的目录布局:

[options.entry_points]
console_scripts =
    tool = tool:main
    tool2 = tool2:main
    tool3 = tool3:main

如果我展平我的项目目录以便所有 3 个都在根目录中,它可以工作,但可能有很多实用工具我不想在根目录中乱七八糟。但似乎如果我将它们放在 utils 下,setup.py 想要将它们创建为 utils 模块下的子模块。

一个潜在的解决方法是:

[options]
scripts =
    tool.py
    utils/tool2.py
    utils/tool3.py

但是你必须始终键入 .py 后缀才能从命令行调用,而我更愿意将其关闭,这样感觉更像“命令行”。

我想做的事情可行吗?

我通过以下方式解决了这个问题:

[options]
scripts =
    dist_scripts/tool
    dist_scripts/tool2
    dist_scripts/tool3

其中 dist_scripts/tooltool.py 的相对软链接,等等。似乎工作正常。