假设我有一个包含控制台脚本的包,例如
from setuptools import setup
setup(
name='eg_package',
version='0.0.1',
description='Trivial test package',
packages=[
'eg_package',
],
entry_points={
'console_scripts': [
'foo = eg_package.main:main',
]
},
)
Run Code Online (Sandbox Code Playgroud)
如果我使用egg_info -b mytag生成的脚本设置和显式构建标记__requires__ = 'eg-package===0.0.1mytag',即使用3"="符号.当标签不像b1测试版那样传统时,会发生这种情况.
起初我认为这是一个错误,但setuptools文档表明它是一个有效的需求标识符.但是,它不适用于旧版本的setuptools,这会导致我们的系统出现问题.
我的问题是什么"==="意思,为什么现代setuptools使用它?
pip文档中的需求说明符部分链接到由 实现的需求说明符的官方文档setuptools pkg_resources。它指定了形式语法,但没有提及语义。
概述文档~=解释了语义,但没有提及===vv.7(与 python 2.7.9 一起安装)和 16 之间显然添加的内容。
当文档失败时,就该查阅来源了。下载setuptools hg 存储库并进行注释pkg_resources/__init__.py最终将我们带到变更集 3125,其中包含消息“使用打包库实现 PEP 440”。
事实上,PEP 440,版本说明符部分解释了语法和语义:
通过检查提交和相关packaging包中的其他文件,我得出了以下明显的结论:
~=从未被生产过;当处理1时,它根据 PEP 中概述的规则充当过滤器。===,在处理时,发出信号回退到旧setuptools版本语法和比较逻辑。只要生成的版本字符串不符合 PEP 2 ,就会生成它。1
合pkg_resources._vendor.packaging.specifiers._compare_compatible()
2pkg_resources.parse_version()产生 apkg_resources.SetuptoolsLegacyVersion而不是pkg_resources.SetuptoolsVersion
| 归档时间: |
|
| 查看次数: |
288 次 |
| 最近记录: |