像 fabric(写在 python 中)这样的包是如何让它的 CLI 工具 fab 的

How does a package like fabric (written in python) make its CLI tool fab

我对在 python 中制作命令行工具感到好奇(无需键入 python tool.py

我知道 fabric 会这样做,所以我开始浏览他们的 github 页面,但我无法找到 fab 工具的实际来源。

  1. 他们是怎么做到的?
  2. 让这样的工具正常工作的最简单方法是什么?

https://github.com/fabric/fabric

(跳过命令行部分,因为那是另一回事,只关注 fab.exe 的来源,因为你让我很好奇。)

来自setup.py,有趣的部分是:

entry_points={
        'console_scripts': [
            'fab = fabric.main:main',
        ]
},

它告诉我们实际开始的是什么。

要重现,这里几乎是空的setup.py:

#!/usr/bin/env python

from setuptools import setup

setup(
    name='consoletest',
    version='1.1',
    entry_points={
        'console_scripts': [
            'consoletest = consoletest.main:main',
        ]
    },
)

请创建一个子目录 consoletest 并在其中放入一个空的 __init__.py(表明它是一个模块)加上一个包含以下内容的 main.py

def main():
    print("hello")

然后发布

python setup.py install

在根目录中,如果一切顺利,将在 python 的 Lib/site-packages 目录中创建一个 egg 文件,并在 Scripts 目录中创建一个 consoletest 可执行文件。 (仅在 Windows/Python 2.7 下测试,因此您可能不会得到相同的结果。)

现在如果你启动 consoletest 它将打印 hello。