새로운 Python 모듈을 빠르게 패키징하는 방법

WBOY
풀어 주다: 2023-05-09 13:13:07
앞으로
1851명이 탐색했습니다.

응용 프로그램을 설치할 때 일반적으로 응용 프로그램의 실행 코드와 문서, 아이콘 등과 같은 중요한 파일이 포함된 소프트웨어 패키지를 설치하게 됩니다. Linux에서 소프트웨어는 일반적으로 RPM 또는 DEB와 같은 형식으로 패키지됩니다. 사용자는 사용 중인 Linux 릴리스에 따라 dnf 또는 apt와 같은 명령을 통해 설치할 수 있습니다. . 하지만 거의 매일 새로운 Python 모듈이 출시되기 때문에 아직 패키징되지 않은 Python 모듈을 쉽게 접할 수 있습니다. 이것이 pyp2rpm의 목적입니다. dnf 或者 apt 等命令就可以进行安装了,这取决于你使用的 Linux 发行版。然而几乎每天都有新的 Python 模块发布,因此你很容易遇到一个尚未打包的 Python 模块。这就是 pyp2rpm 存在的意义了。

最近我在尝试安装一个叫 python-concentration 的模块,但是进展并不太顺利:

$ sudo dnf install python-concentration
Updating Subscription Management repositories.
Last metadata expiration check: 1:23:32 ago on Sat 11 Jun 2022 06:37:25.
No match for argument: python-concentration
Error: Unable to find a match: python-concentration
로그인 후 복사

虽然这是一个发布在 PyPi 的包,但它仍不能被打包成 RPM 包。好消息是你可以使用 pyp2rpm 以一个相对简单的过程将它打包成 RPM 包。

首先你需要设置两个目录:

$ mkdir rpmbuild
$ cd rpmbuild && mkdir SPECS
로그인 후 복사

像这样去安装 pyp2rpm

$ sudo dnf install pyp2rpm
로그인 후 복사

1、生成 spec 文件

RPM 包的基础是一种 spec 文件,这个文件包含你创建这个包的所有信息,如所需的依赖关系、应用的版本号、安装的文件等信息。当指向某个 Python 模块时,pyp2rpm 会为它构建一个 spec 文件,你可以用它来创建 RPM 包。

下面以 python-concentration 为例演示如何构建一个 spec 文件:

$ pyp2rpm concentration > ~/rpmbuild/SPECS/concentration.spec
로그인 후 복사

下面是它生成的文件:

# Created by pyp2rpm-3.3.8
%global pypi_name concentration
%global pypi_version 1.1.5
Name: python-%{pypi_name}
Version:%{pypi_version}
Release:1%{?dist}
Summary:Get work done when you need to, goof off when you don't
License:None
URL:None
Source0:%{pypi_source}
BuildArch:noarch
BuildRequires:python3-devel
BuildRequires:python3dist(setuptools)
%description
Concentration [![PyPI version]( [![Test Status]( [![Lint Status]( [![codecov](
%package -n python3-%{pypi_name}
Summary:%{summary}
%{?python_provide:%python_provide python3-%{pypi_name}}
Requires: (python3dist(hug) >= 2.6.1 with python3dist(hug) < 3~~)
Requires: python3dist(setuptools)
%description -n python3-%{pypi_name}
Concentration [![PyPI version]( [![Test Status]( [![Lint Status]( [![codecov](
%prep
%autosetup -n %{pypi_name}-%{pypi_version}
%build
%py3_build
%install
%py3_install
%files -n python3-%{pypi_name}
%license LICENSE
%doc README.md
%{_bindir}/concentration
%{python3_sitelib}/%{pypi_name}
%{python3_sitelib}/%{pypi_name}-%{pypi_version}-py%{python3_version}.egg-info
%changelog
*- 1.1.5-1
- Initial package.
로그인 후 복사

2、运行 rpmlint

为了确保 spec 文件符合标准,你需要对文件使用 rpmlint 命令:

$ rpmlint ~/rpmbuild/SPEC/concentration.spec
error: bad date in %changelog: - 1.1.5-1
0 packages and 1 specfiles checked; 0 errors, 0 warnings.
로그인 후 복사

看起来更新日志(%changelog)需要记录日期。

%changelog
* Sat Jun 11 2022 Tux- 1.1.5-1
로그인 후 복사

再次运行 rpmint

$ rpmlint ~/rpmbuild/SPEC/concentration.spec
0 packages and 1 specfiles checked; 0 errors, 0 warnings.
로그인 후 복사

成功!

3、下载源码

你需要下载好打包的代码才能进一步构建 RPM 包。一种简单的方式是解析你的 spec 文件以获取源码的网址。

首先,通过 dnf 安装 spectool

$ sudo dnf install spectool
로그인 후 복사

然后通过 spectool 来下载源码:

$ cd ~/rpmbuild
$ spectool -g -R SPEC/concentration.spec
Downloading: https://files.pythonhosted.org/...concentration-1.1.5.tar.gz
 6.0 KiB / 6.0 KiB[=====================================]
Downloaded: concentration-1.1.5.tar.gz
로그인 후 복사

这样就创建了一个 SOURCES 目录并将源码放入其中。

4、构建源软件包

现在你已经验证过 spec 文件了,接下来就可以通过 rpmbuild 构建源软件包了。如果你还没有安装 rpmbuild,你也可以通过 dnf 安装 rpm-build 包(或者在使用 rpmbuild 命令时根据终端的的提示进行安装)。

参数 -bs 表示构建源软件包。添加这个参数会产生一个 src.rpm 文件,这是一个用于为特定架构重新构建的通用包:

$ rpmbuild -bs SPECS/concentration.spec
Wrote: ~/rpmbuild/SRPMS/python-concentration-1.1.5-1.el9.src.rpm
로그인 후 복사

为你的系统构建一个可安装的 RPM 文件:

$ rpmbuild –rebuild SRPMS/python-concentration-1.1.5-1.el9.src.rpm
error: Failed build dependencies:
python3-devel is needed by python-concentration-1.1.5-1.el9.noarch
로그인 후 복사

看起来这个包需要安装 Python 的开发库才能继续构建。安装它们以继续构建。这一次,构建成功了,并且渲染了更多的输出(为了清楚起见,我在这里简略了输出):

$ sudo dnf install python3-devel -y
$ rpmbuild –rebuild SRPMS/python-concentration-1.1.5-1.el9.src.rpm
[...]
Executing(--clean): /bin/sh -e /var/tmp/rpm-tmp.TYA7l2
+ umask 022
+ cd /home/bogus/rpmbuild/BUILD
+ rm -rf concentration-1.1.5
+ RPM_EC=0
++ jobs -p
+ exit 0
로그인 후 복사

你的 RPM 包现在已经构建在 RPMS 子目录下,像平常一样使用 dnf 安装它。

$ sudo dnf install RPMS/noarch/python3-concentration*rpm
로그인 후 복사

为什么不使用 PyPi?

通常情况下我们并不需要将 Python 模块打包成 RPM 包。通过 PyPi 来安装模块也是可以接受的,但是 PyPi 会安装额外的包管理器对你的模块进行检查和更新。当你使用 dnf 来安装 RPM 包时,你在安装完成时就能够获取到完整的安装列表。有了 pyp2rpm

최근에 python-concentration이라는 모듈을 설치하려고 했는데 진행이 그다지 원활하지 않았습니다. 🎜rrreee🎜PyPi에 게시된 패키지이지만 여전히 RPM Bag에 패키징할 수 없습니다. . 좋은 소식은 pyp2rpm을 사용하여 비교적 간단한 프로세스로 RPM 패키지로 패키징할 수 있다는 것입니다. 🎜🎜먼저 두 개의 디렉토리를 설정해야 합니다: 🎜rrreee🎜 다음과 같이 pyp2rpm을 설치합니다: 🎜rrreee

1. 사양 파일 생성

🎜RPM 패키지의 기본은 사양 파일입니다. , 이 파일에는 필수 종속성, 애플리케이션 버전 번호, 설치된 파일 및 기타 정보 등 이 패키지를 만드는 데 필요한 모든 정보가 포함되어 있습니다. Python 모듈을 가리키면 pyp2rpm은 RPM 패키지를 만드는 데 사용할 수 있는 해당 사양 파일을 빌드합니다. 🎜🎜다음은 사양 파일을 빌드하는 방법을 보여주는 예시로 python-concentration을 사용합니다. 🎜rrreee🎜다음은 생성되는 파일입니다. 🎜rrreee

2. >🎜사양이 표준을 준수하는지 확인하려면 파일이 표준을 준수하는 경우 파일에 rpmlint 명령을 사용해야 합니다: 🎜rrreee🎜변경 로그(%changelog code>) 날짜를 기록해야 합니다. 🎜rrreee🎜<code>rpmint를 다시 실행하세요. 🎜rrreee🎜성공! 🎜

3. 소스 코드 다운로드

🎜RPM 패키지를 추가로 빌드하려면 패키지 코드를 다운로드해야 합니다. 간단한 방법은 사양 파일을 구문 분석하여 소스 코드의 URL을 얻는 것입니다. 🎜🎜먼저 dnf를 통해 spectool을 설치하세요. 🎜rrreee🎜그런 다음 spectool을 통해 소스 코드를 다운로드하세요. 🎜rrreee🎜이렇게 하면 가 생성됩니다. SOURCES 디렉터리에 소스 코드를 넣습니다. 🎜

4. 소스 소프트웨어 패키지 빌드

🎜스펙 파일을 확인했으니 이제 rpmbuild를 통해 소스 소프트웨어 패키지를 빌드할 수 있습니다. rpmbuild를 설치하지 않은 경우 dnf를 통해 rpm-build 패키지를 설치할 수도 있습니다(또는 rpmbuild 사용). 명령을 설치하려면 터미널의 프롬프트를 따르십시오.) 🎜🎜-bs 매개변수는 빌드 소스 패키지를 나타냅니다. 이 매개변수를 추가하면 특정 아키텍처를 다시 빌드하기 위한 일반 패키지인 src.rpm 파일이 생성됩니다. 🎜rrreee🎜시스템에 설치 가능한 RPM 파일 빌드: 🎜rrreee🎜이 패키지에는 Python을 설치해야 하는 것 같습니다. 개발 라이브러리 계속해서 건설할 수 있습니다. 계속해서 구축하려면 설치하세요. 이번에는 빌드가 성공하고 더 많은 출력이 렌더링됩니다(명확성을 위해 여기서는 출력을 축약했습니다). 🎜rrreee🎜 이제 RPM 패키지가 RPMS 하위 디렉터리에 빌드되었습니다. dnf 평소대로. 🎜rrreee

PyPi를 사용하면 어떨까요?

🎜일반적으로 Python 모듈을 RPM 패키지로 패키징할 필요는 없습니다. PyPi를 통해 모듈을 설치하는 것도 허용되지만 PyPi는 모듈을 확인하고 업데이트하기 위해 추가 패키지 관리자를 설치합니다. dnf를 사용하여 RPM 패키지를 설치하면 설치가 완료되면 전체 설치 목록이 표시됩니다. pyp2rpm을 사용하면 이 프로세스가 빠르고 쉬우며 자동화됩니다. 🎜

위 내용은 새로운 Python 모듈을 빠르게 패키징하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!