Python 入口点/控制台脚本与setup.py中的脚本之间的差异?
通过Python 入口点/控制台脚本与setup.py中的脚本之间的差异?,python,package,setup.py,Python,Package,Setup.py,通过setup.py,基本上有两种方法将Python控制台脚本安装到我的路径: setup( ... entry_points = { 'console_scripts': [ 'foo = package.module:func', ], } ) 及 有什么区别?我看到第一种方法允许我为脚本选择好的、特定的名称,但是还有其他区别吗?不同的原始用途、兼容性(setuptools、distutils等?)、用法等。。
setup.py
,基本上有两种方法将Python控制台脚本安装到我的路径:
setup(
...
entry_points = {
'console_scripts': [
'foo = package.module:func',
],
}
)
及
有什么区别?我看到第一种方法允许我为脚本选择好的、特定的名称,但是还有其他区别吗?不同的原始用途、兼容性(setuptools、distutils等?)、用法等。。。?我很困惑,一个详细的回答可以帮助我(可能还有其他人)正确理解这一切
更新:自从我提出发布的问题以来。这两种创建命令行可执行文件的方法之间的一个关键区别是使用
setuptools
方法(您的第一个示例),您必须在脚本内部调用函数——在您的例子中,这是模块内部的func
。但是,在distutils方法(您的第二个示例)中,您可以直接调用脚本(它允许列出扩展名或不列出扩展名)。安装工具入口点方法(#1)也有一种方法,即在windows上创建一个.exe,可以像普通windows程序一样双击和调用。这是除了在posix类系统上的bin路径中放置一个脚本之外的一项功能。单击(awesome)包的文档使用入口点而不是脚本,包括
跨平台兼容性和
避免让解释器将\uuuuu name\uuuuu
分配给\uuuuu main\uuuuuu
,这可能会导致代码导入两次(如果其他模块导入您的脚本)
单击是实现用作入口点的函数的一种很好的方法。顺便说一句,还有一个区别是,在使用控制台脚本时,我的模块的init文件是运行的。仅使用脚本时,模块init未运行,仅运行脚本。这是正确答案。基本上,旧的distutils有很多问题。一群非常聪明的人创造了setuptools来取代它。他们合作提出了入口点/控制台脚本机制作为可执行文件分发的标准,因此您不必考虑所有其他选项的问题。不要做英雄。使用你所得到的。我想补充一点,自从我提出这个问题以来,这些很棒的文档出现了:不幸的是@HonzaJavorek-那些“很棒的文档”现在是404/不存在了:/它们存在了,只是结构发生了变化。新链接:你能进一步解释一下“导入两次”吗?我的印象是“if name=='main':'”是用来解决这个问题的?我认为这个答案没有抓住要点。切入点方法是我们都应该使用的新方法。无论何时,只要有一个setuptools替代distutils功能,这都是出于一个很好的理由。或者,scripts
似乎是包含自定义脚本的唯一方法,例如WSGI脚本而不是命令行脚本<代码>入口点将始终生成某种类型的命令行可执行文件。(我不确定这是否是个好主意,但这是一个观察。)[update]链接断开了。我相信是替换(?)更新中的链接再次更新:修复了链接,谢谢!
setup(
...
scripts = [
'scripts/myscript.sh'
]
)