允许使用distutils2-like setup.cfg文件来为包的元数据与distribute/setuptools setup.py脚本
项目描述
简介
d2to1(“d”代表“distutils”)允许使用distutils2-like setup.cfg文件为包的元数据与distribute/setuptools setup.py脚本。它通过提供一个包含所有包元数据的distutils2格式化setup.cfg文件,以及一个极简的setup.py来实现,该脚本将从setup.cfg中提取其参数。
注意:distutils2已被合并到CPython标准库中,现在称为“packaging”。此项目在更改最终确定之前开始。因此,所有对distutils2的引用也应假定是指packaging。
理由
我目前正在进行大量项目的包装重做。我希望所有这些项目都使用类似distutils2的setup.cfg文件,因为它们可能是未来的趋势,而且我总体上更喜欢使用它们,而不是使用可执行文件setup.py。因此,对distutils2的前向支持既是为了未来保障,也是因为使用平面文本文件描述项目元数据的美观。
然而,我不想让这些项目中的任何一个在安装时都要求使用distutils2——它太不稳定了,而且安装范围不广。因此,项目仍然可以使用熟悉的./setup.py install进行安装,例如。此外,我支持的一些包所需的所有用例目前还没有完全被distutils2支持。希望它们最终会通过distutils2核心或通过扩展来实现。但在此期间,d2to1将努力跟上distutils2分发的最新技术和“最佳实践”,同时增加它所缺乏的支持领域。
使用方法
d2to1需要使用distribute或setuptools的发行版。您的发行版必须包含类似distutils2的setup.cfg文件和一个最小的setup.py脚本。有关编写setup.cfg的详细信息,请参阅distutils2文档。一个简单的示例可以在d2to1的自身setup.cfg中找到(它使用自己的机制来安装自己)
[metadata] name = d2to1 version = 0.2.12 author = Erik M. Bray author-email = embray@stsci.edu summary = Allows using distutils2-like setup.cfg files for a package's metadata with a distribute/setuptools setup.py description-file = README.rst CHANGES.rst home-page = http://pypi.python.org/pypi/d2to1 requires-dist = setuptools classifier = Development Status :: 5 - Production/Stable Environment :: Plugins Framework :: Setuptools Plugin Intended Audience :: Developers License :: OSI Approved :: BSD License Operating System :: OS Independent Programming Language :: Python Programming Language :: Python :: 3 Topic :: Software Development :: Build Tools Topic :: Software Development :: Libraries :: Python Modules Topic :: System :: Archiving :: Packaging [files] packages = d2to1 d2to1.extern extra_files = CHANGES.rst LICENSE ez_setup.py [backwards_compat] zip-safe = False tests-require = nose [entry_points] distutils.setup_keywords = d2to1 = d2to1.core:d2to1 zest.releaser.prereleaser.middle = d2_version = d2to1.zestreleaser:prereleaser_middle zest.releaser.postreleaser.middle = d2_version = d2to1.zestreleaser:postreleaser_middle
最小的setup.py应该看起来像这样
#!/usr/bin/env python try: from setuptools import setup except ImportError: from distribute_setup import use_setuptools use_setuptools() from setuptools import setup setup( setup_requires=['d2to1'], d2to1=True )
注意,指定d2to1=True非常重要,否则d2to1功能将不会启用。还可以将d2to1设置为'some_file.cfg'来指定要使用的setup.cfg文件的(相对)路径。但通常这个功能是不必要的。
如果向setup()传递了额外的参数,也应该可以正常工作,但应该注意,它们将被setup.cfg文件中的任何选项覆盖。
注意事项
setup.cfg中的requires-dist选项是通过distribute/setuptools的install_requires选项实现的,而不是通过正常的distutils中的损坏的“requires”关键字。
目前还没有支持distutils2的所有功能。如果某些功能似乎不起作用,那么可能还没有实现。
不支持distutils2资源,并且可能永远不会支持,因为它严重依赖于仅在Python 3.2及更高版本中可用的sysconfig模块。这是d2to1应该被视为过渡工具的一个领域。我真的不想像distutils2那样包含回滚。在此期间,package_data和data_files仍可以在setup.cfg的[files]部分中使用。
更改
0.2.12 (2015-07-16)
修复了一个边缘情况,即当安装多个包时(即安装具有依赖项的包,其中一些可能也使用d2to1)时,我们会调用错误的Distribution类(d2to1需要从distutils获取未修补版本,在某些情况下)。
将捆绑的six模块副本升级到当前版本(1.9.0)。这解决了d2to1与其他包不兼容的问题,这些包在设置过程中导入不同的six版本(较旧的six版本有与其他six实例争夺sys.modules的习惯,这在较新版本中得到修复)。
升级到最新的ez_setup.py,以便在需要的情况下正确引导setuptools的最新版本。
包含了一些杂项黑客技术,以使d2to1能够在Python 2.5上工作,尽管Python社区广泛放弃了Python 2.5支持。d2to1 v0.2.x版本将是最后一个继续支持Python 2.5的版本,因为测试它变得更为困难(而且可能不再值得这种开销)。
0.2.11 (2013-08-29)
为了在需要时使用现代setuptools引导,已将 distribute_setup.py 替换为 ez_setup.py。
修复了几个Python 3特定的几个小问题。特别是,data_files选项可以以dict_items对象的形式传递给setup(),而不是通常期望的列表。
添加了tox.ini(坦白说,我以为已经有一个了)。
0.2.10 (2013-04-10)
在setup.cfg的[metadata]部分添加了对setup-requires-dist选项的支持。这类似于由PEP-426支持的Setup-Requires-Dist元数据字段,并使用setuptools的setup()中的setup_requires参数来实现。
在setup.cfg的[backwards_compat]部分添加了对setuptools的setup()中的dependency_links和include_package_data参数的支持。
当setup_hook调用sys.exit()时,不要显示SystemExit异常的跟踪信息。
修复了在处理setup.cfg时出现异常时的异常格式化问题。
0.2.9 (2013-03-05)
修复了0.2.8中支持的额外文件中的错误。确保猴子补丁不会安装多次,并且日志引用被正确封装。
0.2.8 (2013-03-05)
改进了对设置packages_root选项的包的处理。也就是说,Python包不是直接在源树的根目录中,而是在某个子目录中。现在在处理setup.cfg和运行setup钩子时,将packages_root目录添加到sys.path前面。
通过setup.cfg的[metadata]部分中的keywords选项添加了对Keywords元数据字段的支持。
修复了由于缺少导入而导致的误导性异常,当缺少setup.cfg时会出现。
将随软件包提供的distribute_setup.py升级到distribute 0.6.28的最新版本。
添加了一些基本的函数测试,以及根据需要添加更多测试的基础设施。它们可以用nose运行,可能也可以用py.test运行,尽管py.test还没有经过测试。
改进了钩子导入,使其与命名空间包更好地协同工作。
在setup.cfg的[files]部分中添加了对extra_files选项的支持。这是一个来自distutils2的功能,为包括源分布中的附加文件提供了一个替代方案(它目前不支持通配符模式,但可能应该支持?)
通过setup.cfg的[backwards_compat]部分添加了对setuptools的tests_require设置参数的支持。
原生支持Python 3,无需2to3。这使得支持d2to1的Python 3测试更容易。
0.2.7 (2012-02-20)
如果在setup.cfg中没有定义扩展模块或入口点,不要覆盖在setup.py中可能定义的任何扩展模块/入口点。
0.2.6 (2012-02-17)
在setup.cfg的[entry_points]部分中添加了对setuptools入口点的支持——这只是为了向后兼容的目的,因为packaging/distutils2还没有一个标准的入口点系统替代方案。
为setup.cfg添加了[backwards_compat]部分,用于支持setuptools/distribute支持但不是distutils2标准的其他选项。到目前为止,这里支持的唯一选项是zip_safe和use_2to3。(注意:packaging支持build命令的use-2to3选项,但如果尝试使用该选项,distutils将不会将其识别为有效的构建选项。)
增加了对打包使用的新的(可能是最终的)扩展部分格式的支持。在此格式中,应使用如下格式的配置部分指定扩展:[extension: ext_mod_name],其中任何空白字符都是可选的。旧的格式使用=代替:,尽管仍然支持,但应考虑为过时。
增加了对打包使用的package_data选项的新语法的支持(在打包中已被弃用,转而使用资源系统,但仍然支持)。新语法如下:
package_data = packagename = pattern1 pattern2 pattern3 packagename.subpack = pattern1 pattern2 pattern3
也就是说,在package_data =之后,给出一个包的名称,然后是一个=,然后是任意数量的用空格分隔的通配符模式(或相对于包的实际文件名)。在此方案下,模式本身不允许有空格。
0.2.5 (2011-07-21)
使调用pkg_resources.get_distribution()设置__version__更加健壮,因此它不会在例如VersionConflict错误时失败。
0.2.4 (2011-07-05)
修复了在Python 3上安装时的一些错误。
0.2.3 (2011-06-23)
将'setup_hook'重命名为'setup_hooks',因为现在包装模块中就是这样。增加了对多个setup_hooks的支持。
0.2.2 (2011-06-15)
修复了DefaultGetDict中的错误,其中实际上没有在字典中保存返回的默认值,因此任何命令选项都会丢失。
修复了当分发没有指定任何自定义命令时的KeyError。
0.2.1 (2011-06-15)
在不使用monkey-patching和更可靠地重新实现了命令钩子(尽管它仍然是一个烧红的黑客技巧)。之前的基于monkey patch的解决方案如果d2to1被多次输入会中断,这可能在某些场景中发生。
0.2.0 (2011-06-14)
版本提升,现在仅使用微版本号进行错误修复,因为我的主要功能目标已经完成。
0.1.5 (2011-06-02)
在[files]部分添加了对data_files选项的支持。尽管这被认为是过时的,并且可能在某个时候被删除,但在没有资源支持的情况下可能很有用。
添加了对命令预/后钩子的支持。警告:这稍微修改了distutils.dist.Distribution… :(
添加了对requires-dist中PEP 345风格版本指定的(环境标记尚不支持)的(略微天真)支持。
修复了在描述文件之间插入的新行不足的错误。
0.1.4 (2011-05-24)
在setup.cfg的[global]部分添加了对在'commands'选项中指定的自定义命令类的支持。
在setup.cfg的[global]部分添加了对在'compilers'选项中指定的自定义编译器的初步支持。此功能在distutils/setuptools/distribute中不存在,因此对其的支持是一个烧红的黑客技巧。它还没有真正测试过,只是看到自定义编译器在setup.py build_ext –help-compiler中显示出来,因此任何对此功能的实际测试都将受到欢迎。
0.1.3 (2011-04-20)
添加了zest.releaser条目点,用于在setup.cfg文件中更新版本号;仅当您使用zest.releaser时才有用(否则无害,可能最终将该功能移入一个单独的产品)。
尽管版本0.1.2在Python3中可以工作,但use_2to3没有被添加到setup.py中,因此必须手动运行2to3。
修复了在项目中没有描述文件选项时的崩溃问题。
0.1.2 (2011-04-13)
修复了自安装问题——如果尚未安装d2to1版本,则不会工作,这是由于使用了pkg_resources.require()。
添加了名义上的Python3支持。
修复了setup.cfg中的'classifier'选项。
0.1.1 (2011-04-12)
修复了当setup_hook失败导入时的无帮助错误消息。
使d2to1能够使用自己的机制进行安装。
项目详细信息
d2to1-0.2.12.post1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 49ef2d16862b3efdc81fc5c32eac373b984945cde5fc02bb01a0a11ff03dd825 |
|
MD5 | 1ba7e64ead23cbf104993122f0871030 |
|
BLAKE2b-256 | dcbdeac45e4e77d76f6c0ae539819c40f1babb891d7855129663e37957a7c2df |