一个';sdist'。tar.gz发行版和python鸡蛋?

一个';sdist'。tar.gz发行版和python鸡蛋?,python,egg,sdist,Python,Egg,Sdist,我有点困惑。似乎有两种不同类型的Python包,源发行版(setup.py sdist)和egg发行版(setup.py bdist_egg) 两者似乎只是包含相同数据的存档,即python源文件。一个区别是,最受推荐的软件包管理器pip,无法安装eggs 两者之间的区别是什么?分发我的包的“方法”是什么 (注意,我不想通过PyPI分发我的包,但我想使用一个从PyPI获取依赖项的包管理器)有两种以上不同类型的Python(分发)包。此命令列出了许多子命令: $ python setup.py -

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

两者似乎只是包含相同数据的存档,即python源文件。一个区别是,最受推荐的软件包管理器
pip
,无法安装eggs

两者之间的区别是什么?分发我的包的“方法”是什么


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

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

$ python setup.py --help-commands
请注意各种不同的bdist类型

egg是一种新的包类型,由setuptools引入,但后来被标准库采用。它将以单片方式安装在
sys.path
上。这与sdist包不同,sdist包意味着运行
setup.py install
,将每个文件复制到适当的位置,并可能执行其他操作(构建扩展模块,运行包中包含的其他任意Python代码)

在这个时候,鸡蛋基本上已经过时了。现在最受欢迎的包装格式是“轮子”格式

创建sdist还是egg(或控制盘)与是否能够声明包的依赖关系无关(由PyPI在安装时自动下载)。要使此依赖项功能正常工作,您只需使用distribute(setuptools的继承者)或distutils2(distutils的继承者,在当前的Python 3.x开发版本中也称为打包)提供的额外API来声明依赖项


是获取有关包装的更多信息的良好资源。它涵盖了声明依赖项的一些细节(例如,但不包括
extras\u require
afaict)。

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存档。

这些链接似乎没有在一段时间内更新。有没有更新的材料?@Jean-PaulCalderone是bdist和sdist都是一样的?它们不完全一样。sdist是一种“源分布”。bdist是一种“二进制分布”。对于一个纯Python项目来说,这些事情非常接近。但是,如果您的项目包含任何扩展模块,则sdist将包含这些扩展模块的源代码,使用sdist将需要编译器。bdist包含这些扩展模块的编译形式,不需要编译器,但只能在与您创建bdist的系统非常接近的系统上运行(例如,在Linux上通常需要相同的发行版)。@Jean PaulCalderone,假设我必须随Python文件分发一些图像,因为我的
py
文件使用图像作为输入。当我使用
sdist
bdist
选项时,两者都只包括python文件。如何将图像与python文件一起打包?您必须指定要包含的文件。我已经尝试了以上两种选择。首先创建源分发,然后创建生成分发。当我创建Src Dist时,它会创建一个.gz文件,该文件适合于drc分发。但对于构建分发,当我执行bdist时,它会创建两个文件夹,一个名为lib,另一个名为bdist.win32的空目录。我想做一些类似的事情,为linux系统创建一个发行版(可能是二进制的),我可以给最终用户,最终用户应该能够使用应用程序,但不能阅读代码。我该怎么做?RPM就是答案吗?为什么要用Python创建一个内置发行版?用例是什么?@MartinThoma C extensions为各种平台预编译。