为什么使用distutils时会生成egg-info文件?

4 投票
1 回答
2910 浏览
提问于 2025-04-18 05:20

下面是我的setup.py文件。我在代码中没有使用setuptools,也没有任何外部依赖。

#!/usr/bin/env python

from distutils.core import setup

setup(name='dots',
        ...
        packages=['dots','dots.configs','dots.management','dots.utils','dots.test'],
        scripts=['dots/dots.py']
        )

当我运行 python setup.py install 时,我得到了以下内容:

running install
running build
running build_py
running build_scripts
running install_lib
running install_scripts
changing mode of /Users/kevinlin/.virtualenvs/p-dots/bin/dots.py to 755
running install_egg_info                                                                                <- why?
Removing /Users/kevinlin/.virtualenvs/p-dots/lib/python2.7/site-packages/dots-0.1-py2.7.egg-info
Writing /Users/kevinlin/.virtualenvs/p-dots/lib/python2.7/site-packages/dots-0.1-py2.7.egg-info
(p-dots)Kevins-MacBook-Pro-2% python setup.py install
running install
running build
running build_py
running build_scripts
running install_lib
running install_scripts
changing mode of /Users/kevinlin/.virtualenvs/p-dots/bin/dots.py to 755
running install_egg_info
Removing /Users/kevinlin/.virtualenvs/p-dots/lib/python2.7/site-packages/dots-0.1-py2.7.egg-info
Writing /Users/kevinlin/.virtualenvs/p-dots/lib/python2.7/site-packages/dots-0.1-py2.7.egg-info

我注意到安装了一个 .egg-info 文件。

ls -dl /Users/kevinlin/.virtualenvs/p-dots/lib/python2.7/site-packages/dots*
drwxr-xr-x  10 kevinlin  staff  340 May  4 11:36 /Users/kevinlin/.virtualenvs/p-dots/lib/python2.7/site-packages/dots
-rw-r--r--   1 kevinlin  staff  205 May  4 11:36 /Users/kevinlin/.virtualenvs/p-dots/lib/python2.7/site-packages/dots-0.1-py2.7.egg-info

这是为什么呢?

1 个回答

5

曾经有讨论想把setuptools这个工具加入到Python 2.5的标准库里,后来又考虑只加入pkg_resource(setuptools的一部分)。但是因为各种原因,这个计划没有实现。核心开发者们意识到setuptools是一个很重要的第三方工具,于是决定做一个改动,让用纯distutils的setup.py安装的项目能够生成一个egg-info文件。这样,setuptools和基于它的工具就能知道这些项目已经被安装过了。

更改记录: http://hg.python.org/cpython/rev/93344da76acd

问题单: http://bugs.python.org/issue1459476

(我没有检查关于setuptools在2.5讨论的具体日期,所以我开头的说法可能不准确。不过,讨论的理由依然有效,可以参考那个问题单。)

撰写回答