2014-01-17 43 views
11

对于我们的prod应用程序,我们使用RPM管理所有软件包。在一个完美的纯百胜的世界里,这很好。在RPM环境中管理pip

但是,每种语言或框架最近都在部署他们自己的软件包管理器。例如,对于python,我几乎总是使用pip,然后在生产时再次为rpm生成软件包。 npm或宝石也一样。

这是很多人遇到的问题吗?避免这一切的最好方法是什么?人们是通过吮吸它并手工打包所有东西来解决这个问题的,还是有一些自动化的方法来整合它们?

我很想听听关于此的想法。

回答

8

我已经使用pyp2rpm建立RPM包RSTR模块和我通过PIP或不喜欢某些文件的随机安装:

pyp2rpm -n rstr > ~/rpmbuild/SPECS/rstr.spec 
rpmbuild -ba ~/rpmbuild/SPECS/rstr.spec 

,但我不知道这是不是够用了您的生产使用。

+0

太好了。必须处理这样一个事实,即EL6上的RPM没有定义__python2宏,但除此之外它完美地工作。 – cababunga

1

我更喜欢安装到不同于默认系统的sitelib。因此,我做的事:

$ pip install --user django 

很不理想,不与DNF /转/荫,但在同一时间玩不惹你的系统模块。你可以随时擦拭它们。

1

您可以安装FPM:https://github.com/jordansissel/fpm

包艾芬管理!以非常轻松和理智的方式为多个平台(deb,rpm等)构建软件包。 http://fpm.readthedocs.io/en/latest/

接下来,您可以运行:

$ fpm -s python -t rpm pyramid 
no value for epoch is set, defaulting to nil {:level=>:warn} 
no value for epoch is set, defaulting to nil {:level=>:warn} 
Created package {:path=>"python-pyramid-1.9a2-1.noarch.rpm"} 

-s源型
-t类型的包来创建
并作为最后一个参数封装

https://fpm.readthedocs.io/en/latest/source/python.html

的名字