当前位置: 首页 > 科技观察

分四步打包一个新的Python模块

时间:2023-03-17 13:36:28 科技观察

当你安装一个应用程序时,通常是在安装一个包含应用程序的可执行代码和文档、图标等重要文件的包。在Linux上,软件通常被打包成这样的格式为RPM或DEB,用户可以通过dnf或apt等命令安装它,具体取决于您使用的Linux发行版。但是,几乎每天都会发布新的Python模块,因此您很容易遇到尚未打包的Python模块。这就是pyp2rpm存在的原因。最近我一直在尝试安装一个名为python-concentration的模块,但进展并不顺利:$sudodnfinstallpython-concentration更新订阅管理存储库。最后一次元数据过期检查:2022年6月11日星期六06:37:251:23:32前。Nomatchforargument:python-concentrationError:Unabletofindamatch:python-concentration虽然这是一个在PyPi上发布的包,但它仍然不能打包为RPM包。好消息是您可以使用pyp2rpm以相对简单的过程将其打包为RPM包。首先你需要设置两个目录:$mkdirrpmbuild$cdrpmbuild&&mkdirSPECS像这样安装pyp2rpm:$sudodnfinstallpyp2rpm1,生成spec文件RPM包是基于一个spec文件,这个文件包含了你创建的所有信息此包的详细信息,例如所需的依赖项、应用程序的版本号、已安装的文件和其他信息。当指向Python模块时,pyp2rpm将为它构建一个规范文件,您可以使用它来创建RPM包。下面以python-concentration为例演示如何构建spec文件:$pyp2rpmconcentration>~/rpmbuild/SPECS/concentration.spec下面是它生成的文件:#Createdbypyp2rpm-3.3.8%globalpypi_nameconcentration%globalpypi_version1.1.5名称:python-%{pypi_name}版本:%{pypi_version}发布:1%{?dist}摘要:需要时完成工作,不需要时偷懒许可证:无URL:无Source0:%{pypi_source}BuildArch:noarchBuildRequires:python3-develBuildRequires:python3dist(setuptools)%description浓度[![PyPI版本]([![测试状态]([![Lint状态]([![codecov](%package-npython3-%{pypi_name}摘要:%{summary}%{?python_provide:%python_providepython3-%{pypi_name}}要求:(python3dist(hug)>=2.6.1withpython3dist(hug)<3~~)要求:python3dist(setuptools)%description-npython3-%{pypi_name}浓度[![PyPI版本]([![测试状态]([![Lint状态]([![codecov](%prep%autosetup-n%{pypi_name}-%{pypi_version}%build%py3_build%install%py3_install%files-npython3-%{pypi_name}%licenseLICENSE%docREADME.md%{_bindir}/concentration%{python3_sitelib}/%{pypi_name}%{python3_sitelib}/%{pypi_name}-%{pypi_version}-py%{python3_version}.egg-info%changelog*-1.1.5-1-Initialpackage.2.运行rpmlint为确保规范文件符合要求,您需要在文件上使用rpmlint命令:它貌似更新日志(%changelog)需要记录日期,再次运行rpmint:success!3.下载源代码需要下载打包后的代码进一步构建RPM包,一个简单的方法是解析你的spec文件得到源码的URL首先通过dnf安装spectool:然后通过spectool下载源码:这样会创建一个SOURCES目录并将源码放在其中4.构建源码包否如果你已经验证了spec文件,你可以通过rpmbuild构建源码包。如果你还没有安装rpmbuild,也可以通过dnf安装rpm-build包(或者使用rpmbuild命令时根据终端的提示安装)。参数-bs表示构建源码包。添加此参数生成一个src.rpm文件,这是一个用于为特定体系结构重建的通用包:为您的系统构建一个可安装的RPM文件:看来此包需要安装Python的开发库才能继续构建。安装它们以继续构建。这一次,构建成功了,并呈现了更多的输出(为了清楚起见,我在这里缩写了输出):你的RPM包现在已经构建在RPMS子目录中,照常使用它dnf安装它。为什么不使用PyPi?通常我们不需要将Python模块打包成RPM包。通过PyPi安装模块也是可以接受的,但PyPi将安装额外的包管理器来检查和更新你的模块。使用dnf安装RPM包时,安装完成后可以得到完整的安装列表。使用pyp2rpm,此过程快速、简单且自动化。