modpythonrpm包(怎样将python程序及其依赖打包成rpm包部署)

1.怎样将python程序及其依赖打包成rpm包部署

可以的,虽然说pip比较流行,但rpm从原理上完全可以覆盖这些部署过程,只有一些小的要求:所有环境的Python安装方式必须一致,不能存在某些Python是2.6,某些是2.7,某些装在/usr/local下面,某些在/usr/lib下面之类的情况如果带有C扩展的话,链接到的库应当是来自某个rpm包的。

如果没有的话就简单多了。如果有依赖的其他Python包的话,需要把依赖的包也做成rpm;实在偷懒也可以打进同一个rpm中。

实际上发行版中有许多Python库都以rpm的形式提供,不过一般我们嫌它版本旧,更倾向于用pip管理一组新的。要写一个rpm spec,可以从头自己写,也可以参考一些其他软件的spec,我建议你采用后者,既然你们公司已经广泛使用rpm了,那肯定有很多本公司的spec可以参考,也有人可以问。

回到话题,写rpm spec,或者说rpmbuild的过程,分成以下步骤:部署源代码,一般来说将一个.tar.gz复制到SRC目录中,然后用%setup宏就可以了,这个宏也基本上没干什么特别的事,就是把.tar.gz解压缩了一下,然后进入相应目录。.tar.gz只要从git中取出干净的源代码,整个目录打成tar包就可以了。

好像还有专门的git-archive命令。build过程,对应C/C++项目中的./configure, make。

对Python项目来说一般可以跳过,因为setup.py都会搞定。也可以选择在这个阶段使用setup.py进行build,build出一个wheel包来,这是我推荐的方法,因为wheel包和直接setup.py install的目录结构有一些差异,而pip安装默认是按照wheel的方式。

也就是说在这一步调用:setup.py bdist_wheel。再精细一点可以指定build的目标为build目录,这样需要cleanup的时候容易一些。

install过程,对应C/C++项目中的make install。一般来说我们平时怎么装这个软件,这一步就怎么装,所以我们也是使用setup.py。

唯一的技巧在于,我们需要指定安装的目标到rpmbuild根的某个目录下面,而不是系统的目录。这个目录在install开始之前应当被清空。

可以参考其他spec。对于我们来说,就是将Python的库安装到指定的目录,而不是系统的site-packges当中。

如果你在build这一步已经打包了wheel,那么使用wheel install命令、指定目标文件夹就可以了。打包过程,rpm的打包原理非常简单,最开始install的目录是空的,install完成后里面有了一堆文件,那么就按照文件列表将这一堆文件打包、然后指定每个文件将来应当安装到什么位置。

对于Python项目来说,一般会安装package名的目录和EGGINFO两个目录,将这两个目录连同里面所有的内容一起加入%files段就可以了。如果你要部署的是某个应用,一般你还会希望将init.d中的启动脚本、或者 systemd的配置文件以及其他应用的配置文件一起部署了,可以在install的过程中将这些文件从源文件目录中复制到目标文件夹里,然后加到files段里面。

安装、卸载脚本。表现为%pre, %post之类的段一般来说如果你有服务要安装的话,需要在这里使用chkconfig, chkconfig on,或者systemd的话就是systemctl enable。

如果你希望安装完有个机会修改配置文件,可以选择在首次安装的时候不要启动服务,而在update的时候启动服务,这可以通过脚本传进的第一个命令行参数$1进行判断,0、1、2表示不同的情况(分别是卸载、安装、更新,具体的记不清了),可以参考其他人写的spec;也可以选择安装完永远直接启动,在post中使用service xxx start, 在preuninstall的时候使用service xxx stop。rpm的功能还是很强大的,除了跟pip共通的功能以外,它有一个显著的好处就是可以帮助你同时管理服务的配置、启动和停止,从而简化部署过程。

不过要注意如果使用rpm的话就不要同时使用pip,否则pip更新过的库,rpm卸载或更新时会冲突。有第三方依赖的时候,一种方法是为每个依赖项写一个独立的spec,里面内容都是上面这样的直接调用setup.py,或者更简单一些,在install的时候直接调用pip就可以;然后在需要这些依赖项的rpm包的spec当中写上Require信息,跟pip体系的requirements差不多。

偷懒也可以在同一个rpm中打了一堆Python包进去,但是如果有多个独立安装的rpm都打了同一个Python包,就会冲突,要注意。其实用习惯了会觉得也不比pip差,需要跟非Python组件混合部署的时候反而会觉得简单了很多。

2.怎样将python程序及其依赖打包成rpm包部署

面2.4.1例 首先自设载源码包:protobuf-2.4.1.tar.bz2假设放/data目录 1.安装protobuf tar jxvf protobuf-2.4.1.tar.bz2 cd /data/protobuf-2.4.1 ./configure make make install ldconfig 2. 安装python版本 cd /data/protobuf-2.4.1/python python setup.py build python setup.py install 安装完。

3.python中,mod

英文解释是:

mod_python is an Apache HTTP Server module that integrates the Python programming language into the Apache server.

中文是:

mode_python,是个模块,是Apache HTTP 服务器的中的模块;

与此相对应的是,Apache HTTP服务器,还有很多其他模块,用来实现其他功能。

而mode_python,是用来,使得Apache支持Python语言,这样,你就可以在Apache中运行python代码了(否则是没法运行的)

所以,mode_python,本来也就不是Python语言的中的东西。

所以,烦请以后问问题的时候,不清楚的话,不要随便下结论,这样容易误导自己和别人,OK?

4.升级python2.7.5 后怎么rpm

因为CentOS系统中旧版本的Python已被深度依赖,所以不能卸载原有的Python,只能全新安装。

1.下载Pyhon,选择下载Gzipped source tar ball (2.7.6) (sig)网址https://www.python.org/download/releases/2.7.62.解压安装,命令如下tar -xvf Python-2.7.6.tgzcd Python-2.7.6./configure --prefix=/usr/local/python2.7makemake install3.创建链接来使系统默认python变为python2.7ln -fs /usr/local/python2.7/bin/python2.7 /usr/bin/python4.查看Python版本python –V5.修改yum配置(否则yum无法正常运行)vi /usr/bin/yum将第一行的#!/usr/bin/python修改为系统原有的python版本地址#!/usr/bin/python2.6。

5.请问哪有支持mod

九州我以前买过一个月,但存在的安全问题不得不考虑.九州的确可以支持python,php,perl,。

客服也还行,但安全方面还没做好,脚本支持都采用apache的mod形式,文件上传后默认是666,文件所有者是客户的,但,所属的组确是一个公共组.试着把文件权限改成700,打开网页,报以下错误:failed to open stream: Permission denied in Unknown on line 0没有权限执行,这说明执行程序的不是虚拟主机用户,而是组用户.刚好所有虚拟主机用户都是在同一个组,呵呵。懂一点linux/unix的用户应该都知道我想说什么。

[; 本帖最后由 mystic168 于 2007-9-13 16:23 编辑 ]。

modpythonrpm包

转载请注明出处编程代码网 » modpythonrpm包(怎样将python程序及其依赖打包成rpm包部署)

资讯

matlab和python的区别(Python跟Matlab有什么区别和联系呢)

阅读(33)

本文主要为您介绍matlab和python的区别,内容包括Python跟Matlab有什么区别和联系呢,学matlab还是python好,python与matlab的优缺点比较。联系:可以使用python语言开发Matlab软件使用的程序。区别:指点不同Python:是一种跨平台的计算机程序设计

资讯

time.mktimepython(python怎么将时间戳转化为日期)

阅读(46)

本文主要为您介绍time.mktimepython,内容包括python怎么将时间戳转化为日期,python中怎么把datetime类型转换成timestamp,pythondatetime处理时间。当前时间戳:time.time()当前日期:time.ctime()Python下日期到时间戳的转换import datetimeim

资讯

pythoncjson安装(python里面怎么安装json包)

阅读(51)

本文主要为您介绍pythoncjson安装,内容包括python里面怎么安装json包,reportlab怎么安装,pythonlxml怎么安装。python中的json解释库有好几个,不同版本使用方法不同。常用有 json-py 与smiplejson 两个包其中,json-py

资讯

sketchpython(PythonIDLE与python有什么区别)

阅读(47)

本文主要为您介绍sketchpython,内容包括如何优雅的在手机上写Python,纯手机党怎么学python,python的IDLE是什么意思。指代不同Python IDLE:是Python的集成开发环境 ,自1.5.2b1以来已与该语言的默认实现捆绑在一起。 2、python:

资讯

djangopython3.6(python3可以用django吗)

阅读(46)

本文主要为您介绍djangopython3.6,内容包括python3.6怎么新建一个django,3.6pyhton使用什么版本的django,Python3.6使用Django框架中使用Pandas的DataFrame函数没有奏效问。支持,可以使用最新的版本。Get the latest version of Python at h

资讯

python不自动退出(怎样让python运行完了不直接退出)

阅读(40)

本文主要为您介绍python不自动退出,内容包括Python程序运行完后不自动退出,为什么,怎样让python运行完了不直接退出,用python写的程序方法可以使运行命令窗口不自动关闭搜狗。解决办法有两种:代码要对齐,一般Py脚本里面加 input函数是不会自

资讯

pythonmac更新版本(mac怎么升级python版本)

阅读(32)

本文主要为您介绍pythonmac更新版本,内容包括mac怎么升级python版本,如何更新Mac自带Python,如何升级mac自带的python。下载Python3.5 for Mac 一步步安装安装的默认路径是:/Library/Frameworks/Python.framewo

资讯

pythonos和sys(pythonos和sys模块的区别)

阅读(34)

本文主要为您介绍pythonos和sys,内容包括pythonos和sys模块的区别,python中os和sys模块的区别与常用方法总结,python的os和sys在windows下应该也是可以用的吧为什么用help(os)。os与sys模块的官方解释如下:os: This module provides a porta

资讯

pythonpep是什么(英语python是什么意思)

阅读(30)

本文主要为您介绍pythonpep是什么,内容包括请问Python中的PEP8啦,PEP333啦中PEP的意思,python中的docstring什么意思,python的IDLE是什么意思。英语python是什么意思?英语python的意思是巨蛇,大蟒。我们通常所说的Python是一种广泛使用的解释

资讯

pythoncommonlisp(Python,C,Perl,andLISP解释)

阅读(20)

本文主要为您介绍pythoncommonlisp,内容包括pythonc++common.lispD语言学这些编程语言好就业创业吗,Reddit为什么放弃CommonLisp用Python,pythonperllispc应先从哪个学起哪个更容易些。一Python(KK 英语发音: /pa?θɑn/, DJ 英语发音: /?paiθ

资讯

python并列条件(python并列条件判断怎么写例如ifa>b&c)

阅读(26)

本文主要为您介绍python并列条件,内容包括python并列条件判断怎么写例如ifa>bamp;amp;c,python并列条件判断怎么写例如ifa>b&c,python并列条件判断怎么写例如ifa>b&c。pythonPython 2.7.3 (default, Mar 14 2014, 11:57:14) [GCC 4.7.2