요구 사항: Python(패키지)은 RHEL 사양 파일에 대해 무엇을 합니까?

요구 사항: Python(패키지)은 RHEL 사양 파일에 대해 무엇을 합니까?

저는 현재 RPM 없이 일부 Python 패키지를 패키징하고 있으며, 그 중 일부는 제가 패키징하는 다른 패키지에 의존합니다.

패키징하는 동안 사람들이 다음 형식으로 이 작업을 수행하는 것을 보았지만 Require: python(pkg-name)이를 사용하기 위한 특정 구문이 있는지 이해하려고 노력하고 있습니다. 왜냐하면 그것이 사용될 때 필요한 패키지의 버전을 신경쓰지 않는 것 같기 때문입니다.

예:

Requires: Python(gocd-cli) >= 0.9

RPM을 빌드한 후 요구 사항 목록에 표시됩니다.

$ rpm -qp --requires dist/gocd-cli.encryption.blowfish-1.0-1.noarch.rpm
Python(gocd-cli) >= 0.9
python(abi) = 2.6
python-crypto
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1

gocd-cli 패키지 버전 >= 0.9가 아직 빌드되어 사용 가능하지 않지만 패키지는 완벽하게 설치됩니다.

전체적으로 내가 이해하려고 하는 것은 다음과 같습니다.

  1. 어떻게 Requires: Python()사용해야 합니까?
  2. 이 부분을 뭐라고 부르나요 Python()? Ruby, Perl 등 다른 언어도 봤는데...

답변1

Ruby와 Perl 모듈은 이러한 가상 공급자를 사용하지만, 내가 아는 한 Python은 이를 사용하지 않습니다.

이는 가상 공급에 지나지 않습니다(참조:가상 기능 장 만들기). 어떤 모듈을 사용하고 싶은지 알고 있지만 어떤 패키지에 해당 모듈이 포함되어 있는지 모르는 경우에 유용합니다. 대부분의 경우 매우 간단하고 를 perl-foo제공하지만 perl(foo), 그렇게 간단하지 않은 경우도 있습니다. 예를 perl(APR)들어 mod_perl.

Perl의 가상 공급자는 꽤 오래되었으며 rpm 및 rpmbuild에 의해 직접 처리됩니다. Ruby에서는 수동으로 추가해야 했지만 이제는 rpm으로도 처리됩니다. Python의 경우 아무도 이러한 변경을 추진하지 않으며 일반적으로 이러한 가상 리소스를 사용하지 않습니다. 따라서 정확한 패키지 이름이 필요합니다.

결론적으로:

Python 라이브러리를 패키징하는 경우 사양을 입력해도 아무런 해가 없습니다.

Provides: python(foo) = %{version}-%{release}

그러나 다른 Python 모듈에서 이를 제공할 것이라고 기대해서는 안 되며, 일반 패키지 이름을 사용하여 요청해야 합니다.

마지막 참고 사항 - 대소문자 구분이 필요/제공되므로 Python(foo) != python(foo).

관련 정보