赞成和反对';脚本';与';入口点';在Python命令行脚本中

赞成和反对';脚本';与';入口点';在Python命令行脚本中,python,scripting,setuptools,setup.py,Python,Scripting,Setuptools,Setup.py,Python有两种向Python包添加命令行脚本的方法:script和entry\u point 概述了这些方法: 脚本 将Python脚本(最有趣的笑话)添加到包树中,并将其路径添加到setup.py: setup( ... scripts=['bin/funniest-joke'], ... ) 入口点: 将Python脚本(最有趣的笑话)添加到包树中。向它添加一个main()函数,并添加运行funniest的main()的命令行.py子模块: 命令行.py: se

Python有两种向Python包添加命令行脚本的方法:
script
entry\u point

概述了这些方法:

脚本
将Python脚本(
最有趣的笑话
)添加到包树中,并将其路径添加到
setup.py

setup(
    ...
    scripts=['bin/funniest-joke'],
    ...
)
入口点: 将Python脚本(
最有趣的笑话
)添加到包树中。向它添加一个
main()
函数,并添加运行funniest的
main()的
命令行.py
子模块:

命令行.py
setup.py

每种方法的优缺点是什么?

基本上,脚本是一种旧方法,它要求您拥有一个独立的可执行脚本文件,而入口点方法允许您定义在发出命令时要运行的函数。通过这种方式,您可以在同一文件/模块中拥有多个功能,然后拥有“入口点”,当用户在其中一个
console\u脚本
命令中键入时,将调用该入口点

尽管setup()支持脚本关键字来指向要安装的预制脚本,但实现跨平台兼容性的推荐方法是使用console_脚本入口点(见下文)

From()

的可能重复项
import funniest

def main():
    print funniest.joke()
setup(
    ...
    entry_points = {
        'console_scripts': ['funniest-joke=funniest.command_line:main'],
    }
    ...
)