'sdist'.tar.gz发行版和蟒蛇蛋有什么区别?

时间:2011-06-09 12:17:13

标签: python egg sdist

我有点困惑。似乎有两种不同类型的Python包,源代码分发(setup.py sdist)和egg分发(setup.py bdist_egg)。

两者似乎只是具有相同数据的档案,即python源文件。一个区别是,pip,最推荐的包管理器,无法安装鸡蛋。

两者之间的区别是什么?'分发我的包的方式是什么?

(注意,我不想通过PyPI分发我的包,但我想使用从PyPI获取依赖项的包管理器)

2 个答案:

答案 0 :(得分:30)

setup.py sdist创建源代码分发:它包含setup.py,模块/脚本的源文件(.py文件或.c / .cpp用于二进制模块),数据文件等。结果是一个存档,然后可以用来重新编译任何平台上的所有内容。

setup.py bdist(和bdist_*)创建内置发行版:它包含.pyc文件,.so / .dll / .dylib表示二进制模块,.exe表示如果使用Windows上的py2exe,您的数据文件......但没有setup.py。结果是一个特定于平台(例如linux-x86_64)和Python版本的存档,只需将其解压缩到文件系统的根目录即可安装(可执行文件位于/ usr / bin中) (或等效),/ usr / share中的数据文件,/ usr / lib / pythonX.X / site-packages / ...中的模块。您甚至可以构建可以使用包管理器直接安装的rpm存档。

答案 1 :(得分:13)

有两种以上不同类型的Python(分发)包。此命令列出了许多子命令:

$ python setup.py --help-commands

请注意各种不同的 bdist 类型。

一个鸡蛋一种新的包类型,由setuptools引入,后来被标准库采用。它应该安装在sys.path上。这不同于 sdist 包,它意味着运行setup.py install,将每个文件复制到位并可能采取其他操作(构建扩展模块,运行包含在其中的其他任意Python代码)封装)。

到目前为止,鸡蛋已基本淘汰。现在最受欢迎的包装格式是“轮子”格式。

是否创建sdist或egg(或wheel)与是否能够声明包具有哪些依赖项(在安装时由PyPI自动下载)无关。此依赖项功能所需的全部工作是使用 distribute (setuptools的后继者)或 distutils2 (distutils的后继者)提供的额外API来声明依赖项。 - 在Python 3.x的当前开发版本中称为打包

https://packaging.python.org/是有关包装的更多信息的良好资源。它涵盖了声明依赖关系的一些细节(例如install_requires但不是extras_require afaict)。