entry_points / console_scripts和setup.py中的脚本之间的区别?
基本上有两种方法通过setup.py
将Python控制台脚本安装到我的path中:
setup( ... entry_points = { 'console_scripts': [ 'foo = package.module:func', ], } )
和
setup( ... scripts = [ 'scripts/myscript.sh' ] )
有什么区别? 我看到第一种方法允许我为脚本select好的,特定的名称,但是还有其他的区别吗? 不同的原始目的,兼容性(setuptools,distutils,…?),用法,…? 我很困惑,一个精心制作的答复可以帮助我(也可能是其他人)正确理解这一切。
更新:因为我问了这个问题, PyPA 在这个话题上发表了这些很酷的文档 。
(awesome)Click包的文档提示了一些使用入口点的原因 ,而不是脚本,包括
- 跨平台兼容性和
- 避免让解释器将
\__name__
分配给\__main__
,这可能导致代码被导入两次(如果另一个模块导入了您的脚本)
点击是一个很好的方式来实现函数作为entry_points
,顺便说一句。
创build命令行可执行文件的两种方法之间的一个主要区别是,使用setuptools
方法(您的第一个示例),您必须在脚本内部调用一个函数 – 在您的情况下,这是module
内部的func
。 然而,在distutils
方法(你的第二个例子),你直接调用脚本(允许被列出有或没有扩展名)。
设置工具入口点方法(#1)也有一个好处 ,就是在窗口上.exe会被创build,可以被双击并像普通的windows程序一样被调用。 这是除了在类似posix的系统上的脚本path中放置脚本之外。
还有一个不同是,当使用console_scripts时,我的模块的init文件已经运行。 当只使用脚本时,模块init不运行,只运行脚本。