【发布时间】:2014-04-25 14:04:44
【问题描述】:
我正在为 rpm 包编写 .spec 文件,但遇到了问题。 我需要使用另一个包的特定版本安装该包。 让我们以python包为例。所以,我写了:
Requires : bash, grep, python >= 2.6.7-4b
但是,即使python包是2.6.6版本,也会安装包。 如果我删除 python 包,系统会显示我的包需要 python 2.6.7。
有什么问题吗?
来自rpm -q --provides python的输出:
Distutils
python(abi) = 2.6
python-abi = 2.6
python-ctypes = 1.0.1
python-hashlib = 20081120
python-sqlite = 2.3.2
python-uuid = 1.31
python-x86_64 = 2.6.6-52.el6
python2 = 2.6.6
python = 2.6.6-52.el6
python(x86-64) = 2.6.6-52.el6
rpm -qpR $yourpackage.rpm 的输出:
/bin/sh
python >= 2.6.7-4b
bash
grep
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PartialHardlinkSets) <= 4.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(PayloadIsXz) <= 5.2-1
【问题讨论】:
-
您能否将
rpm -q --provides python的输出发布到安装了 2.6.6 并满足您的软件包要求的系统上?也请发布rpm -qR $yourpackage或rpm -qpR $yourpackage.rpm输出。 -
@EtanReisner 第一个命令的输出是: Distutils python(abi) = 2.6 python-abi = 2.6 python-ctypes = 1.0.1 python-hashlib = 20081120 python-sqlite = 2.3.2 python -uuid = 1.31 python-x86_64 = 2.6.6-52.el6 python2 = 2.6.6 python = 2.6.6-52.el6 python(x86-64) = 2.6.6-52.el6和最后一个命令的输出是:/bin/sh python >= 2.6.7-4b bash grep rpmlib(CompressedFileNames)
-
我在我的 CentOS 5 机器上做了一个快速测试,其中安装的 python 版本是
2.4.3-56(带有一个需要python >= 2.4.4-15的虚拟包)并且 rpm 无法正确安装包。你确定系统有你期望的python包吗? 'rpm -q --whatprovides python' 在系统上说什么? -
@EtanReisner 当我输入
python(x86-64) >= 2.6.7-4b时,它可以工作。 =) 但是我如何定义一种通用的方法来识别我正在使用的架构。例如,如果我的机器是 i386,则需要 python(x86-32),如果我使用的是 x86_64,则需要 python(x86-64)。 -
在 32 位系统上真的有
python(x86-32)提供吗?那会让我感到惊讶。您可以将%_arch用于规范文件中的当前架构并进行检测/等。基于此,如果您需要,但我不知道为什么将python >= ...更改为python(x86-64) >= ...应该在这里有所作为。