在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真的不行吗?这仅仅是一个单独的例子,它们之间的啮合不好吗?)
¹无论如何我通常都会这样做,因为这似乎是个好习惯。
答案 0 :(得分:0)
要从Python代码中明确执行等效于-m
的内容,请查看runpy.run_module()
。您使用该代码创建脚本并将其放入scripts
。
或者(也许最好是),将在-m
上触发的“启动代码”放置到函数中,然后将该函数注册为入口点:
def main():
<...>
if __name__ == '__main__.py':
main()