我有点困惑。似乎有两种不同的Python包,源代码发行版(setup.py sdist)和egg发行版(setup.py bdist_egg)。
两者似乎都是包含相同数据的归档文件,即python源文件。一个不同之处在于,最受推荐的包管理器pip
不能安装eggs。
这两者之间的区别是什么?分发我的软件包的“正确”方式是什么?
(注意,我不想通过PyPI分发我的包,但我想使用一个从PyPI获取依赖项的包管理器)
发布于 2011-06-09 20:35:16
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归档。
发布于 2011-06-09 20:22:47
Python2021更新:构建和使用鸡蛋的工具在中不再存在。
不只是两种不同的Python (发行版)包。此命令列出了许多子命令:
$ python setup.py --help-commands
注意各种不同的bdist类型。
egg是一种新的包类型,由setuptools引入,但后来被标准库采用。它将被整体安装到sys.path
上。这与sdist包不同,sdist包意味着运行setup.py install
,将每个文件复制到适当的位置,并可能采取其他操作(构建扩展模块,运行包中包含的额外任意Python代码)。
鸡蛋在这一点上基本上已经过时了。编辑:鸡蛋消失了,它们是通过命令"easy_install“使用的,这个命令已经从Python语言中删除了。
现在最受欢迎的打包格式是"wheel“格式,特别是"pip install”使用的格式。
是否创建sdist或egg (或轮子)与您是否能够声明包具有哪些依赖项(将在安装时由PyPI自动下载)无关。要让这个依赖特性起作用,您只需使用由distribute (setuptools的后继者)或distutils2 ( distutils的后继者-在Python3.x的当前开发版本中称为打包)提供的额外API来声明依赖项。
有关打包的更多信息,https://packaging.python.org/是一个很好的资源。它涵盖了声明依赖项的一些细节(例如install_requires,但不包括extras_require
afaict)。
https://stackoverflow.com/questions/6292652
复制相似问题