使用SCons构建Python包的工具
项目描述
使用SCons构建Python包。
Enscons是一个基于SCons的Python打包工具。它构建与pip兼容的源分布和轮子,不使用distutils或setuptools,包括包含C扩展的分布。Enscons具有与distutils不同的架构和哲学。enscons不是向Python打包系统添加构建功能,而是将Python打包添加到通用构建系统中。
Enscons可以帮助您构建pip可以自动构建的sdists,以及与enscons无关的轮子。
enscons提供了什么?
Enscons提供了一小段代码来生成轮子、执行开发安装、生成egg-info和dist-info元数据、将setup.py转换为pyproject.toml和SConstruct的基本转换,以及使用distutils编译C扩展时使用的标志配置SCons的编译器。
Enscons实现了一个PEP 518构建后端,以及一个setup.py适配器,可用于pip install -e .
Enscons提供了从pip和tox发送到setup.py的参数转换到SCons可以使用的内容的代码,然后执行SConstruct,这是Makefile的SCons对应物。
为什么您可能想要使用enscons?
如果您想使用SCons,enscons最有用。SCons具有distutils所不具备的超级功能。如果您
永远也记不住如何编写MANIFEST.in。
Enscons不使用MANIFEST.in。相反,SCons会自动知道哪些文件是基于您告诉它构建或安装的文件。您可以通过简单的glob()或任何Python代码构建此列表。
您希望将生成的文件包含在您的sdist中。
所有Python sdists都包含生成的PKG-INFO元数据,但有时包含其他生成的文件,如生成的C扩展代码,在sdist中也很有用。一旦SCons知道如何构建你的文件,只需将其追加到源列表中,它就会自动重建并包含在源存档中。
有时你会忘记清理你的构建目录。
SCons不关心你的构建目录中是否有额外的文件。它的依赖关系跟踪技术知道你打算构建的文件确切是什么;如果你在未清理构建目录的情况下为PyPy和CPython(不同的C扩展文件名)构建wheel,它只会包含每个wheel中的正确扩展。
你更喜欢仅在必要时进行构建。
SCons仅在依赖项发生变化时重建你的C扩展、sdist和wheel。
你需要扩展distutils。
使用enscons的最有说服力的理由是,如果distutils(或共享其架构的setuptools)不能满足你的需求。distutils基于子类的基本架构使其难以扩展,任何distutils扩展都必须针对Python的多个版本、setuptools以及任何其他可能使用的distutils扩展进行调试。
在SCons中,添加一个简单的编译器实际上是一行代码。如果你的项目需要使用代码生成或调用任何distutils不支持编译器或构建链,切换可能比扩展distutils更容易。
你希望开发自己的distutils替代品。
Enscons的代码量不到1,000行,但实现了wheel、setup.py、setup.py develop和其他看似神奇的复杂功能。distutils的重要部分很简单。Enscons可能是想在不同通用构建系统上实现相同功能的人的有用参考。
使用enscons
使用pip安装enscons:pip install enscons。
如果你是从现有项目开始的,尝试在你的setup.py旁边运行python -m enscons.setup2toml进行转换。它将创建一个pyproject.toml和一个SConstruct,这应该是一个很好的起点。它可以转换只有*.py的简单纯Python项目,但对于包含非Python文件或C扩展的项目,需要调整SConstruct。
通过运行python -m SCons来构建项目。
如果你不是从现有的setup.py开始的,获取enscons的源代码,并将pyproject.toml、SConstruct和setup.py复制到你的项目中。
使用PEP 621格式编辑pyproject.toml中的自己的元数据键。Enscons将使用这些键生成静态元数据文件(PKG-INFO和METADATA)。除了PEP 621之外,还识别一些setup.py风格的键:description_file(由readme取代),url,author和author_email(由authors取代),license作为字符串,keywords作为字符串,platform,install_requires(由dependencies取代),extras_require(由optional-dependencies取代),以及src_root。
enscons项目示例
目前,了解enscons工作原理的最好方法是通过示例。
rsalette 简单的包,仅包含两个模块。
cryptacular 包含C扩展。
pysdl2-cffi 在构建过程中生成Python和C源代码,然后编译生成的源代码。
hello-pyrust 使用Rust和cffi(而不是C)的扩展。
enscons Enscons自己构建自己。
nonstdlib 将Python标准库重新打包成多个轮子。
关于SCons的更多信息
SCons是一个通用构建系统。它是纯Python编写的,可以在Python 2和Python 3上运行,并且拥有良好的社区支持。非常少的其他构建系统能够满足所有这些标准。这些特性使SCons成为实验性Python打包系统的良好平台。
项目详情
下载文件
下载适合您平台的应用程序。如果您不确定选择哪个,请了解有关安装包的更多信息。
源代码发行版
构建发行版
enscons-0.30.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a555d1af3fa98fc19b76adc23b955a4b600b70268298d1b42dc90ae30b3f2a06 |
|
MD5 | b361de05fb8b8227eac06ee39e092882 |
|
BLAKE2b-256 | 8d1ad6f2ef382db137c2ce83395bfd8e63953f56b744c9d318f00c4ca946c48f |
enscons-0.30.0-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b3ffce7f2c2bcd580bab8e846a1901170763b193f248238ac5c85ba9447a7772 |
|
MD5 | 1d74f7a1945685bd0dc4d19ef93032c8 |
|
BLAKE2b-256 | 932c4266e9537ad9c2bf31367b645ec0eef6f0b3d2878e98235c92d8e7f5e7b1 |