如何在Linux系统下把一个python模块转换成一个rpm安装包

这样做的目的一方面是解决那些不能访问外网的主机安装这些python模块的问题,另一方面是可以提高特定python模块的部署效率。
下文是根据使用需求,将一个python2.7使用的mysql-python模块制作为一个rpm安装包,作为示例。类似的步骤可以在变换fpm选项参数后,用于满足更多的rpm包制作需求。
我们先来看下为python2.7安装一个mysql-python模块使其支持MySQLdb的常规方法:
yum -y install mysql-devel python27-devel
yum -y install python27-pip
pip2.7 install MySQL-python
对于源码编译安装的mysql,还需手动创建一个下面的软链接,不然python2.7在import MySQLdb时会报错:
ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64/libmysqlclient.so.18

上面的安装过程中会有很多的依赖包问题,对于不能访问外网的主机,达到这个安装的目的是一个很大的挑战。即便是那些可以访问外网yum安装源的主机,因为要经过多个步骤的下载、安装过程,也略显繁琐。

下面是我们使用转换后的rpm包,一个命令,不需要连网,立即达到相同的配置效果:

rpm -ivh  python-mysql-python-1.2.5-1.el6.x86_64.rpm

以下是制作这样一个rpm包的全部步骤:
  yum -y install ruby-devel gcc curl libyaml-devel
  yum -y install mysql-devel python27-devel python27-setuptools
  command curl -sSL https://rvm.io/mpapis.asc | sudo gpg2 --import -
  curl -L get.rvm.io | bash -s stable
  source /etc/profile.d/rvm.sh
  rvm requirements
  rvm install 1.9.3
  rvm use 1.9.3 --default
  rvm rubygems current
  gem install fpm
  fpm --debug -s python -t rpm --python-bin python2.7 --python-install-lib /usr/lib/python2.7/site-packages --rpm-dist 'el6' mysql-python

详情说明:
1、安装rvm工具
Ruby enVironment Manager 一个Ruby的环境管理器,详细介绍参见: https://github.com/rvm/rvm
上文步骤中,先安装了一个rvm管理器,然后使用rvm安装了Ruby 1.9.3,并作为默认版本使用。
2、安装RubyGems打包工具
rvm rubygems current
switches version of rubygems for the current ruby,RubyGems(简称 gems)是一个用于对 Ruby组件进行打包的 Ruby 打包系统。
3、安装fpm打包工具
gem install fpm
FPM功能简单说就是将一种类型的包转换成另一种类型。
FPM的github:https://github.com/jordansissel/fpm
支持的源类型包:
  • dir: 将目录打包成所需要的类型,可以用于源码编译安装的软件包
  • rpm: 对rpm进行转换
  • gem: 对rubygem包进行转换
  • python: 将Python模块打包成相应的类型
4、生成需要的rpm安装包
fpm --debug -s python -t rpm --python-bin python2.7 --python-install-lib /usr/lib/python2.7/site-packages --rpm-dist 'el6' mysql-python
Usage:
    fpm [OPTIONS] [ARGS] ...
FPM参数:
    [ARGS] ...                    Inputs to the source package type. For the 'dir' type, this is the files and directories you want to include in the package. For others, like 'gem', it specifies the packages to download and use as the gem input 。输入源包类型。 对于“dir”类型,这是要包含在文件包中的文件和目录。 对于其他情况,如“gem”,需要指定要下载和使用gem输入的软件包。例如上面命令行最后一个参数,即“mysql-python”模块的名称。
FPM常用选项:
1
2
3
4
5
6
7
8
9
10
11
12
-s:指定源类型
-t:指定目标类型,即想要制作为什么包
-n:指定包的名字
- v :指定包的版本号
-C:指定打包的相对路径
-d:指定依赖于哪些包
-f:第二次包时目录下如果有同名安装包存在,则覆盖它
-p:输出的安装包的目录,不想放在当前目录下就需要指定
--post- install :软件包安装完成之后所要运行的脚本;同--offer- install
--pre- install :软件包安装完成之前所要运行的脚本;同--before- install
--post-uninstall:软件包卸载完成之后所要运行的脚本;同--offer-remove
--pre-uninstall:软件包卸载完成之前所要运行的脚本;同—before-remove
--python-bin PYTHON_EXECUTABLE (python only) The path to the python executable you wish to run. (default: "python")
--python-install-lib LIB_PATH (python only) The path to where python libs should be installed to
--rpm-dist DIST-TAG           (rpm only) Set the rpm distribution.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值