栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python 解析 spec 文件

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python 解析 spec 文件

参考链接:python-rpm-spec · PyPI

安装模块

先使用 pip 安装 python-rpm-spec 模块

pip3 install python-rpm-spec
使用示例

test.spec

Name:           pandas
Version:        0.25.3
Release:        2
Summary:        Data structures and data analysis tools for Python
License:        BSD
URL:            https://pandas.pydata.org/
Source0:        https://github.com/pandas-dev/pandas/releases/download/v%{version}/%{pypi_name}-%{version}.tar.gz

BuildRequires:  gcc gcc-c++ gdb-headless
BuildRequires:  python3-devel python3-setuptools python3-numpy
%if %{with test}
BuildRequires:  python3-pytest >= 4.0.2
%endif

Requires: python3-numpy python3-dateutil python3-pytz
Conflicts: conflicts-test

Provides: provides-test
Obsoletes: obsoletes-test

test.py 

# pip3 install python-rpm-spec
from pyrpm.spec import Spec

spec_path = 'test.spec'
spec = Spec.from_file(spec_path)

print('Name:'.ljust(20), spec.name)
print('Version:'.ljust(20), spec.version)
print('Release:'.ljust(20), spec.release)
print('Summary:'.ljust(20), spec.summary)
print('License:'.ljust(20), spec.license)
print('URL:'.ljust(20), spec.url)
print('Source0:'.ljust(20), spec.sources[0])
print('Requires:'.ljust(20), spec.requires)
print('BuildRequires:'.ljust(20), spec.build_requires)
print('Provides:'.ljust(20), spec.provides)
print('Conflicts:'.ljust(20), spec.conflicts)
print('Obsoletes:'.ljust(20), spec.obsoletes)
print('SourceList:'.ljust(20), spec.sources)
print('SourceDict:'.ljust(20), spec.sources_dict)

# build_requires = []
# for br in spec.build_requires:
#     build_requires.append(f'{br.name} {br.operator} {br.version}' if br.version else f'{br.name}')
# print('BuildRequires:'.ljust(20), build_requires)

result

Name:                pandas
Version:             0.25.3
Release:             2
Summary:             Data structures and data analysis tools for Python
License:             BSD
URL:                 https://pandas.pydata.org/
Source0:             https://github.com/pandas-dev/pandas/releases/download/v%{version}/%{pypi_name}-%{version}.tar.gz
Requires:            [python3-numpy, python3-dateutil, python3-pytz]
BuildRequires:       [gcc, gcc-c++, gdb-headless, python3-devel, python3-setuptools, python3-numpy, python3-pytest >= 4.0.2]
Provides:            [provides-test]
Conflicts:           [conflicts-test]
Obsoletes:           [obsoletes-test]
SourceList:          ['https://github.com/pandas-dev/pandas/releases/download/v%{version}/%{pypi_name}-%{version}.tar.gz']
SourceDict:          {'Source0': 'https://github.com/pandas-dev/pandas/releases/download/v%{version}/%{pypi_name}-%{version}.tar.gz'}
其他字段

当然,如果你好奇心更严重一点,或许可以从 spec.py 的源码文件看出,它其实也是使用的正则匹配去获取 spec 文件对应的这些内容的,只不过通过封装添加了一些额外的处理,下面展示了一些其他可能的字段。

_tags = [
    _Namevalue("name", re_tag_compile(r"^Names*:s*(S+)")),
    _Namevalue("version", re_tag_compile(r"^Versions*:s*(S+)")),
    _Namevalue("epoch", re_tag_compile(r"^Epochs*:s*(S+)")),
    _Namevalue("release", re_tag_compile(r"^Releases*:s*(S+)")),
    _Namevalue("summary", re_tag_compile(r"^Summarys*:s*(.+)")),
    _Namevalue("description", re_tag_compile(r"^%descriptions*(S*)")),
    _Namevalue("changelog", re_tag_compile(r"^%changelogs*(S*)")),
    _Namevalue("license", re_tag_compile(r"^Licenses*:s*(.+)")),
    _Namevalue("group", re_tag_compile(r"^Groups*:s*(.+)")),
    _Namevalue("url", re_tag_compile(r"^URLs*:s*(S+)")),
    _Namevalue("buildroot", re_tag_compile(r"^BuildRoots*:s*(S+)")),
    _SplitValue("buildarch", re_tag_compile(r"^BuildArchs*:s*(S+)")),
    _SplitValue("excludearch", re_tag_compile(r"^ExcludeArchs*:s*(.+)")),
    _SplitValue("exclusivearch", re_tag_compile(r"^ExclusiveArchs*:s*(.+)")),
    _ListAndDict("sources", re_tag_compile(r"^(Sourced*s*):s*(.+)")),
    _ListAndDict("patches", re_tag_compile(r"^(Patchd*s*):s*(S+)")),
    _List("build_requires", re_tag_compile(r"^BuildRequiress*:s*(.+)")),
    _List("requires", re_tag_compile(r"^Requiress*:s*(.+)")),
    _List("conflicts", re_tag_compile(r"^Conflictss*:s*(.+)")),
    _List("obsoletes", re_tag_compile(r"^Obsoletess*:s*(.+)")),
    _List("provides", re_tag_compile(r"^Providess*:s*(.+)")),
    _List("packages", re.compile(r"^%packages+(S+)")),
    _MacroDef("define", re.compile(r"^%defines+(S+)s+(S+)")),
    _MacroDef("global", re.compile(r"^%globals+(S+)s+(S+)")),
    _DummyMacroDef("dummy", re.compile(r"^%[a-z_]+b.*$")),
]

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/313638.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号