在为 SCL 构建 python 模块 RPM 时,如何修复对 python(abi) 的需求?

在为 SCL 构建 python 模块 RPM 时,如何修复对 python(abi) 的需求?

我目前正在尝试使用 SCL python33 存储库在 CentOS 6 上为我们的一个应用程序设置环境。该应用程序还需要一些额外的 python 模块,例如 numpy,所以我正在尝试构建这些模块;我快完成了,但是当我构建包时,它需要python(abi) => 3.3

根据 SCL 文档,我想更改 Requires,这很明显,我看到一堆 goo/etc/rpm/macros.python3.python33似乎应该处理这个问题(这是一个隐式要求,不是我可以在 specfile 中更改的),但我不知道如何让这些宏覆盖 specfile 中的各种宏。是否有人为 python 模块构建 RPM 以添加到 python33 SCL,您采取了哪些步骤?

需要说明的是,这是我目前的程序:

setup.py bdist --format=rpm             # to generate the base specfile, numpy.spec
spec2scl numpy.spec                     # to generate the SCLed specfile
(edit specfile to remove %define __os_install_post bloc which doesn't cooperate with SCL)
rpmbuild -ba numpy.py -D 'scl python33' # to try and build the RPM from the specfile

这使我获得了一个 RPM,但是要求却不完整(需要python33-python(abi))。

答案1

您可能已经解决了这个问题,但我想用对我来说容易的方法进行更新。

我的情况如下:

我正在从下载的 egg 文件中构建几个 python27 SCL RPM,使用脚本来完成所有操作 - 旁注:这就是我如何引入我们的 Python Django Web 应用程序的所有依赖项,并从 Atlassian Bamboo 计划中运行以构建 Web 应用程序 RPM。

就这里讨论的需求问题而言 -

我以编程方式将包名称替换为“python27-python-”前缀,并且所有打包文件都选择了“/opt/rh/python27/root”的 SCL 根路径,所以一切都很好......除了它们都选择了对 python(abi) = 2.7 的要求,就像你对 3.3 的要求一样

注意:由于我用 SCL 版本替换了包的“名称”,因此我将其保存为一个新的 setup.py 文件,我将其命名为:

setupSCL.py

我尝试了一些宏的咒语,但对我来说解决需求问题的实际上很简单。

在我的 setup.py 命令行中,我刚刚添加:

--no-autoreq

为了替换那个错误的自动要求,我在我们都寻求的 SCL 版本中添加了:

--requires "python27-python"

所以我的实际命令行是:

python setupSCL.py bdist_rpm --no-autoreq --requires "python27-python" &> /dev/null

太棒了!效果非常好

因此,当我使用 yum deplist 检查要求时(在此示例中为 djangorestframework):

我得到:

yum deplist /root/rpmbuild/SOURCES/djangorestframework-2.4.4/dist/python27-python-djangorestframework-2.4.4-1.noarch.rpm

Finding dependencies: 
package: python27-python-djangorestframework.noarch 2.4.4-1
  dependency: python27-python
   provider: python27-python.x86_64 2.7.5-7.el6.centos.alt

希望有一天这能帮助到别人...

相关内容