为什么setuptools不创建我的入口点?

3 投票
2 回答
2741 浏览
提问于 2025-04-17 21:20

我的项目文件夹结构是这样的:

clc
 |-clc
 |  |-__init__.py
 |  |-clc.py
 |  |-main.py
 |-setup.py

main.py 的内容是这样的:

def main():
    print "it works!"

setup.py 文件中:

config = {
    ...
    'entry_points':
        'clc_scripts': ['clc = clc.main:main']
    }
}
setup(**config)

当我运行 python setup.py build 时,结果是这样的:

running build
running build_py
creating build
creating build/lib
creating build/lib/clc
copying clc/__init__.py -> build/lib/clc
copying clc/clc.py -> build/lib/clc
copying clc/main.py -> build/lib/clc

没有创建 bin 文件夹,尽管我指定了一个入口点。不过,它确实创建了一个文件 clc.egg-info/entry_points.txt

$ cat clc.egg-info/entry_points.txt
[clc_scripts]
clc = clc.main:main

为什么 setuptools 没有创建我的入口点可执行文件呢?

2 个回答

3

入口点脚本是在安装的时候创建的,而不是在构建的时候。这是因为这些脚本需要指向正确的Python解释器的位置,也就是你安装的那个Python的具体位置。

5

1) 生成脚本的入口点叫做 console_scripts

所以在你的 setup.py 文件中,把入口点的名字改成这样:

config = {
    ...
    'entry_points':
        'console_scripts': ['clc = clc.main:main']
    }
}

2) 入口点 在你仅仅执行 build 来构建你的分发包时是不会被执行的。它们实际上只有在 installdevelop 时才有意义。试试运行 python setup.py install

撰写回答