问题 在RPM环境中管理pip


对于我们的prod应用程序,我们以RPM管理所有包。在一个完美的百胜世界,这很好。

但是,最近每种语言或框架都在部署自己的包管理器。例如,对于python,我几乎总是使用pip,然后在进入生产时再次为rpm构建包。同样适用于npm或宝石。

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

我很乐意听到这方面的想法。


6441
2018-01-17 18:18


起源



答案:


我用过 pyp2rpm 为...构建rpm包 RSTR 模块,我不喜欢通过随机安装一些文件 果仁 以及:

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

但我不知道这对你的生产用途是否足够好。


8
2018-03-21 20:04



大。不得不处理这样一个事实,即EL6上的RPM没有定义__python2宏,但除此之外它完美无缺。 - cababunga


答案:


我用过 pyp2rpm 为...构建rpm包 RSTR 模块,我不喜欢通过随机安装一些文件 果仁 以及:

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

但我不知道这对你的生产用途是否足够好。


8
2018-03-21 20:04



大。不得不处理这样一个事实,即EL6上的RPM没有定义__python2宏,但除此之外它完美无缺。 - cababunga


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

Effing包管理!为多个平台(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


2
2018-06-19 14:51





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

$ pip install --user django

远非理想,不使用dnf / rpm / yum但同时不会弄乱你的系统模块。你可以随时擦拭它们。


1
2017-09-08 17:54