如何为早期版本的python构建RPM?

时间:2014-10-10 02:09:27

标签: python rpm

如何构建仅依赖于早期版本的python的python发行版RPM?

为什么?我正在尝试为RHEL6 / CentOS 6构建一个分发RPM,它只包含Python 2.6,但我通常在使用Python 2.7的机器上构建。

这是一个开源项目,我已经确保它不应该包含任何不在2.6中的库/ API。

我正在使用以下内容构建RPM:

python setup.py bdist_rpm

setup.py文件:

from distutils.core import setup

setup(name='pyresttest',
    version='0.1',
    description=Text',
    maintainer='Not listing here',
    maintainer_email='no,just no',
    url='project url here',
    keywords='rest web http testing',
    packages=['pyresttest'],
    license='Apache License, Version 2.0',
    requires=['yaml','pycurl']
)

(删除了网址,维护者,电子邮件和说明的细节)。

RPM似乎有效,但是当我尝试在RHEL6上安装时,出现此错误: pyresttest-0.1-1.noarch

需要python(abi)= 2.7

应该有一些方法可以让它覆盖默认的python版本,或提供一个自定义的SPEC文件,但经过几个小时的摆弄后,我就陷入了困境。想法?


编辑:我想我应该澄清为什么我要为python代码执行RPM,而不是仅使用setuptools或pip:这有望在工作中投入生产,其中所有部署都是基于RPM的,而且大多数虚拟机仍然是RHEL6。要求他们采用另一种包装工具可能不是首发,因为我们的公司与RPM格式密切相关。

2 个答案:

答案 0 :(得分:2)

重新组织答案。

实际上,没有" rpm-package"。有RHEL6的rpm包,FedoraNN的rpm包,OpenSUSE-X.Y的rpm-packagse等等。除了Debian,Ubuntu,Arch和Gentoo之外:)

您的Python包具有以下可能性:

  1. 您可以完全避免使用rpm,deb和其他本地Linux打包系统,并且可以选择使用" python-native"像PIP这样的包装系统。因此,您可以完全避免各种版本和各种Linux版本的打包系统之间的复杂性和兼容性。并且对于没有渗透到"深入到核心系统",这可能是最好的解决方案。

  2. 您可以继续使用RPM作为程序包的存档格式,但完全关闭自动依赖项计算。这可以通过规范中的AutoReqProv: no指令来完成。为了能够使用自定义规范,可以使用--spec-only--spec-file distutils options。但请记住,以这种方式构建的包比p.1中的zip更糟糕:如果没有适当的依赖关系,它会包含较少的必要元信息,因此&#34; defames&#34; Linux包装系统背后的整个想法,这些系统是为了构建一致的系统而发明的,以避免类似DLL和地狱的问题。并适用于自动维护和更新。实际上,您可以通过Requires: <something>标记手动添加依赖关系信息,但如果您同时定位多个Linux平台,这可能会变得更加困难和烦恼。

  3. 为了考虑特定包装系统的所有复杂和无聊的细节和细微差别,您可以创建&#34;构建沙箱&#34;使用适当版本的必要Linux风格。我创建此类沙箱的首选方法是使用预先创建的"OpenVZ templates",但不使用OpenVZ本身:只需将给定存档解压缩到子目录(root以保留权限),然后{{1}进入子目录,瞧!你有Debian,RHEL等...... Fedora人为了同样的目的创建了Mock,而chroot可能是一个更精细的解决方案。正如@BobMcGee在评论中建议的那样,人们也可以考虑Jenkins Docker plugin

  4. 一旦你有一个特定于该系统的python发行版的构建沙箱,distutils等你可以使用简单的脚本,bash或python自动化构建过程。

    那就是它。

答案 1 :(得分:0)

我不做很多python工作,但做了一些RPM包装。您可能需要以某种方式执行人们通常在RPM的规范文件中执行的操作,并指定并要求特定版本的python包,如此...

# this would be in your spec file
requires: python <= 2.6

请点击此处了解更多信息:

http://ftp.rpm.org/max-rpm/s1-rpm-depend-manual-dependencies.html