如何在命令行中获取"setup.cfg"元数据(Python)



当您有一个setup.py文件时,您可以通过以下命令获取包的名称:

C:somedir>python setup.py --name

这将把包的名称打印到命令行中。

为了遵守最佳实践,我试图通过将所有内容都放在setup.cfg中来迁移setup.py,因为以前在setup.py中的所有内容都是静态内容。

但我们的构建管道取决于是否能够调用python setup.py --name。我希望以这样一种方式重写管道,即不需要创建setup.py文件。

当您有setup.cfg文件而没有setup.py文件时,有没有办法获得包的名称

TL;DR,使用setuptools配置APIhttps://setuptools.pypa.io/en/latest/setuptools.html#configuration-api。

在您的情况下,这一行将给出包裹的名称:

python -c 'from setuptools.config import read_configuration as c; print(c("setup.cfg")["metadata"]["name"])'

编辑:

在setuptools v61.0.0(2022年3月24日(中,setuptools.config.read_configuration已被弃用。使用新的API,命令变为:

python -c 'from setuptools.config.setupcfg import read_configuration as c; print(c("setup.cfg")["metadata"]["name"])'

解释:

Setuptools公开了一个read_configuration()函数,用于解析配置的元数据和选项部分。在内部,setuptools使用configparser模块来解析配置文件setup.cfg。对于简单的CCD_ 13型数据;name";键,则可以使用configparser读取数据。但是,setuptools也允许使用无法直接使用configparser解析的指令进行动态配置。

以下是一个示例,显示了两种替换python setup.py --version的方法之间的差异:

$ tree .
.
├── my_package
│   └── __init__.py
├── pyproject.toml
└── setup.cfg
1 directory, 3 files
$ cat setup.cfg
[metadata]
name = my_package
version = attr:my_package.__version__
[options]
packages = find:
$ cat my_package/__init__.py 
__version__ = "1.0.0"
$ cat pyproject.toml
$ python -c 'from setuptools.config import read_configuration as c; print(c("setup.cfg")["metadata"]["version"])'
1.0.0
$ python -c 'from configparser import ConfigParser; c = ConfigParser(); c.read("setup.cfg"); print(c["metadata"]["version"])'
attr:my_package.__version__

也许使用ConfigParser Python模块?

python -c "from configparser import ConfigParser; cf = ConfigParser(); cf.read('setup.cfg'); print(cf['metadata']['name'])"

对于"过度杀伤";该解决方案允许在build项目的帮助下,从任何PEP517兼容项目(即pyproject.toml(中获取任何元数据字段:

#!/usr/bin/env python3
import argparse
import pathlib
import build.util
def _main():
args_parser = argparse.ArgumentParser()
args_parser.add_argument('path')
args = args_parser.parse_args()
path_name = getattr(args, 'path')
path = pathlib.Path(path_name)
#
metadata = build.util.project_wheel_metadata(path)
print(metadata)
if __name__ == '__main__':
_main()

这实际上会调用构建后端(setuptoolspoetryflitpdm或watever(,因此这可能需要几秒钟的时间。

这里记载了CCD_ 17 API(在">最新"上(;0.7.0(16-09-2021(";,在这一变化中。


但是的,现实地说,正如你已经说过的,我建议保持最小的setup.py:

#!/usr/bin/env python3
import setuptools
setuptools.setup()

使得CCD_ 19保持工作

当然,正如其他人已经说过的那样,解析是一个可行且简单的解决方案setuptools使用标准库中的ConfigParser来读取setup.cfg文件,因此您也可以这样做。


另一种可能的解决方案(归功于wim(:

python -c 'import setuptools; setuptools.setup()' --name

相关内容

  • 没有找到相关文章

最新更新