我构建的Python RPM不支持

2024-04-19 17:23:59 发布

您现在位置:Python中文网/ 问答频道 /正文

因为我必须在通过kickstart过程构建的多个Oracle Linux服务器上安装多个版本的Python,所以我想为我们的yum存储库构建一个Python rpm。我可以使用“make altinstall”手动构建Python,它不会安装在默认的系统Python安装之上,所以我认为这是可行的方法。

经过多次尝试和错误之后,我成功地构建了一个以.bz2 python 2.7包开始的rpm—但是现在当我尝试安装它时,我得到了一个错误:

error: Failed dependencies:
    /usr/local/bin/python is needed by Python-2.7.2-1.i386

什么。。。???我正试图安装Python!!!系统默认的Python(2.4)在/usr/bin/Python中!!!python目录的原型位置是/tmp/python2.7(可执行文件是/tmp/python2.7/bin/python2.7)。那么为什么它在/usr/local/bin中查找呢?

这是我的RPM规范的核心:

%prep
%setup -q

%build
./configure --prefix=/tmp/python2.7
make

%install

make altinstall

我仔细查看了rpm构建日志,发现:

Requires: /bin/sh /tmp/python2.7/bin/python2.7 /usr/bin/env /usr/local/bin/python libc.so.6 libc.so.6(GLIBC_2.0)...[a lot more...]

好的,这里有/usr/local/bin的输入。。。现在,问题是,如何确定这些要求?我有没有说什么不对?我需要重写某些内容吗?

像许多rpm新手一样,我得到了构建部分,但我并没有真正“搞懂”在rpm build的末尾发生了什么,以及实际放入rpm文件的内容(除了您在%files中指定的文件)以及在进行rpm安装时实际发生了什么。

有谁能告诉我为什么我的安装失败了,或者我可能读到了什么来理解为什么我的rpm构建需要我尝试构建的东西吗?


Tags: 文件build内容makebin过程usrlocal
2条回答

您应该可以通过将以下行添加到规范文件中来解决此问题:

AutoReq: no

这是我对为什么这是必要的理解。当rpmbuild在.py文件中运行一个#!(shebang)它将自动添加shebang指定为需求的二进制文件。不仅如此,如果shebang是#!/usr/bin/env python,它还将为解析为的对象(第一个python在$PATH)添加一个依赖项。

您要么需要关闭自动需求处理,要么找到所有会导致问题的shebang并将其更改为其他内容。

rpmbuild可以变得非常聪明,这就是其中之一。它可能从包含以下内容的脚本文件中提取了/usr/local/bin/python

#!/usr/local/bin/python

在上面。在bz2文件中的文件中尝试grep'ing以获取此路径。

相关问题 更多 >