setuptools entry_point:指向可执行模块/软件包?

时间:2019-04-12 20:05:47

标签: python setuptools

setup.py文件中,是否可以将entry_points(在.../bin中创建内容)指向可执行模块或软件包?也就是说,如果我具有以下设置:

foo/
  __init__.py
  __main__.py

我可以做python3 -m foo,Python将执行该程序包。 (这很方便,因为它允许相对导入起作用。)

setup.py脚本中,我可以将二进制文件添加到.../bin中,

entry_points={
    'console_scripts': ['foo=foo.bar:func'],
},

执行函数 foo.bar.func()(假设它存在);是否有可能使其类似于python3 -m foo?还是只执行功能硬连线?

(当然,我可以将我所有的代码移动到名为main()¹的函数中,foo.__main__:main似乎可以正常工作。感觉就像setuptools和{ {1}} Python 3方面确实应该协同工作,但是AFAICT真的不行吗?这仅仅是一个单独的例子,它们之间的啮合不好吗?)

¹无论如何我通常都会这样做,因为这似乎是个好习惯。

1 个答案:

答案 0 :(得分:0)

要从Python代码中明确执行等效于-m的内容,请查看runpy.run_module()。您使用该代码创建脚本并将其放入scripts

或者(也许最好是),将在-m上触发的“启动代码”放置到函数中,然后将该函数注册为入口点:

def main():
    <...>

if __name__ == '__main__.py':
    main()