基本上有两种方法可以通过setup.py
将Python控制台脚本安装到我的路径中:
setup(
...
entry_points = {
'console_scripts': [
'foo = package.module:func',
],
}
)
和
setup(
...
scripts = [
'scripts/myscript.sh'
]
)
有什么区别?我看到第一种方法允许我为我的脚本选择好的,特定的名称,但是还有其他差异吗?不同的原始用途,兼容性(setuptools,distutils,......?),用法,......?我很困惑,一个精心设计的回复可以帮助我(也可能还有其他人)正确理解这一切。
更新:自从我提出问题PyPA已发布these cool docs on the topic。
答案 0 :(得分:35)
(真棒)点击包suggest a few reasons的文档使用入口点而不是脚本,包括
__name__
分配给__main__
,这可能导致代码被导入两次(如果另一个模块导入您的脚本) Click是一种实现函数的好方法,可以用作entry_points
,顺便说一句。
答案 1 :(得分:13)
这两种创建命令行可执行文件的方法之间的一个关键区别是,使用setuptools
方法(您的第一个示例),您必须在脚本内部调用函数 - 在您的情况下,这是{您func
内的{1}}。但是,在module
方法(您的第二个示例)中,您可以直接调用脚本(允许列出带或不带扩展名)。
答案 2 :(得分:6)
设置工具入口点方法(#1)也有the benefit,在Windows上将创建一个可以双击并像常规Windows程序一样调用的.exe文件。除了将脚本放置在类似posix的系统上的bin路径中之外。
答案 3 :(得分:0)
另一个区别是,当使用console_scripts时,我的模块的 init 文件已运行。仅使用脚本时,模块 init 未运行,只运行了脚本。