我有点困惑.似乎有两种不同类型的Python包,源代码分发(setup.py sdist)和egg分发(setup.py bdist_egg).
两者似乎只是具有相同数据的档案,即python源文件.一个区别是pip
,最推荐的包管理器无法安装鸡蛋.
两者之间的区别是什么?分发我的包的方式是什么?
(注意,我不想通过PyPI分发我的包,但我想使用从PyPI获取依赖关系的包管理器)
Sch*_*uki 39
setup.py sdist
创建一个源代码分发:它包含setup.py,模块/脚本的源文件(.py文件或二进制模块的.c/.cpp),数据文件等.结果是一个可以使用的存档在任何平台上重新编译所有内容.
setup.py bdist
(和bdist_*
)创建一个内置的发行版:它包括.pyc文件,.so/.dll/.dylib用于二进制模块,.exe(如果py2exe
在Windows上使用),您的数据文件...但没有setup.py.结果是一个特定于平台(例如linux-x86_64
)和Python版本的存档,只需将其解压缩到文件系统的根目录即可安装(可执行文件位于/ usr/bin(或等效),/usr/share中的数据文件,/ usr/lib/pythonX.X/site-packages/...中的模块.您甚至可以构建可以使用包管理器直接安装的rpm存档.
Jea*_*one 14
有两种以上不同类型的Python(分发)包.此命令列出了许多子命令:
$ python setup.py --help-commands
Run Code Online (Sandbox Code Playgroud)
请注意各种不同的bdist类型.
一个鸡蛋是一种新的包装类型,由setuptools引入,但后来被标准库采用.它意味着要安装在整体上sys.path
.这不同于sdist包,它意味着setup.py install
运行,将每个文件复制到位并可能采取其他操作(构建扩展模块,运行包中包含的其他任意Python代码).
此时鸡蛋在很大程度上已经过时了.现在最受欢迎的包装格式是"轮子"格式.
无论是创建一个sdist还是一个egg(或wheel),都与您是否能够声明包具有哪些依赖关系(在安装时由PyPI自动下载)无关.此依赖项功能所需的全部工作是使用distribute(setuptools的后继者)或distutils2(distutils的后继者 - 在Python 3的当前开发版本中称为打包)提供的额外API来声明依赖项. X).
https://packaging.python.org/是有关包装的更多信息的良好资源.它涵盖了声明依赖项的一些细节(例如install_requires但不是extras_require
afaict).