python项目的打包和rpmbuild制作rpm安装包

6 篇文章 0 订阅
3 篇文章 0 订阅

openstack 的horizon项目支持通过插件的方式,将自开发的功能集成进dashboard里。关于插件方式集成,不是我们这里的重点,感兴趣的同学可以自行查阅。

        我们关心的是,当插件开发完毕后,如何将项目打包成可以在redhat系列的rpm的安装包,然后可以统一进行标准的安装。既然是python写的项目,那么我们先看看python是如何支持软件包的分发和安装的。参考这里,我们可以知道python已经提供了分发和包安装的方式:

1、源码包安装方式 python setup.py install

我们先来看一下源码包安装,其实就是适用python 标准库中的distutils或者是对distutils进行增强了的setuptools库,实现安装包生成和安装包安装。由于distutils属于最早的包安装标准库,并且setuptools 是对distutils的增强,他们的使用方式就是在项目的跟目录添加setup.py文件,在文件中引入setuptools或者disutils ,方式如下:

setup.py

from distutils.core import setup
 
setup(
    name="hello_module",
    version="1.0",
    author="xxx",
    author_email="xxxxxx@sh.com",
    py_modules=['hello'],
)

然后,然后通过 python setup.py sdist会在项目中生成了dist目录下,并且在该目录下会生成项目的分发包xxx.tar.gz ,然后用户可以通过拿到这个tar.gz的包,在需要安装的环境中,解压后,通过python setup.py install 的方式,将项目安装到python的安装目录后就可以正常试用。

2、通过包管理pip/easy_install进行在线安装 

         这里提供了一种比源码更方便的方式进行在线包安装。开发者完成软件的开发工作后,通过setup.py方式对项目进行打包,上传到https://pypi.org/ 上,然后通过easy_install或者pip(比easy_install更有好更高级)连接远程pipy,通过简单的pip install xxxx 就可以快乐的进行在线安装了。是不是很easy。

    然后,我们再看看rpm是什么?

        RPM是由红帽公司开发的软件包管理( Red Hat Package Manager)的缩写,在redhat系列的操作系统中使用rpm可以方便的进行软件的安装、查询、卸载、升级等工作。

喔,原来rpm就是redhat 搞出来一个在自己系统中方便安装软件的管理规范。也就是说,我们按照他的方式,将软件打包成rpm的格式,就可以很方便的进行安装了。我们现在的目标就是要将自己写的项目打包成rpm包,方便安装。

    那么如何将软件打包成rpm的格式呢?不要急,rpm提供了一个构建rpm的工具叫做rpm-build,可以通过yum 安装rpm-build直接使用 。通过rpmbuild 就可以把一个源码包打包成rpm格式的安装包。rpm的使用我们这里不作为重点来讲,感兴趣的可以参考这里,或者自行查阅。rpmbuild 打包时需要一个spec文件,而这个文件就是整个打包的核心,打包时按照这个spec文件作为规范,进行打包。这个spec文件不太好写,有很多语法和宏的概念,我们这里就主要研究下这个spec文件。

    作为程序员和技术人员,我们一定要对得起前人的作出的贡献,要有借鉴的思维,也就是说,我们只有站在巨人的肩膀上,才能尿巨人一身。(偷笑)

因此,我找了openstack社区相似的项目manila-ui,这个项目也是为了将文件共享相关的界面通过插件的方式集成进dashboard中。而且,manila-ui也实现了rpm制作和分发。因此,我们就结合manila-ui的spec 文件来学习如何编写自己的spec文件,实现项目的打包。

好了,我们先看下项目结构:

manila-ui-2.1.0
├── AUTHORS
├── babel.cfg
├── ChangeLog
├── CONTRIBUTING.rst
├── doc
├── HACKING.rst
├── LICENSE
├── manage.py
├── manila_ui
├── manila_ui.egg-info
├── PKG-INFO
├── README.rst
├── requirements.txt
├── run_tests.sh
├── setup.cfg
├── setup.py
├── test-requirements.txt
├── tools
 

来看manila-ui项目的这两个文件:

setup.cfg

[metadata]
name = manila-ui
summary = Manila Management Dashboard
description-file = 
	README.rst
author = OpenStack
author-email = openstack-dev@lists.openstack.org
home-page = http://www.openstack.org/
classifier = 
	Environment :: OpenStack
	Intended Audience :: Information Technology
	Intended Audience :: System Administrators
	License :: OSI Approved :: Apache Software License
	Operating System :: POSIX :: Linux
	Programming Language :: Python
	Programming Language :: Python :: 2
	Programming Language :: Python :: 2.7
	Programming Language :: Python :: 3
	Programming Language :: Python :: 3.4

[files]
packages = 
	manila_ui

[build_sphinx]
source-dir = doc/source
build-dir = doc/build
all_files = 1

[upload_sphinx]
upload-dir = doc/build/html

[compile_catalog]
directory = manila_ui/locale
domain = manila-ui

[update_catalog]
domain = manila-ui
output_dir = manila_ui/locale
input_file = manila_ui/locale/manila-ui.pot

[extract_messages]
keywords = _ gettext ngettext l_ lazy_gettext
mapping_file = babel.cfg
output_file = manila_ui/locale/manila-ui.pot

[egg_info]
tag_date = 0
tag_svn_revision = 0
tag_build = 

setup.py

try:
    import multiprocessing  # noqa
except ImportError:
    pass

setuptools.setup(
    setup_requires=['pbr>=1.8'],
    pbr=True)

未完待续。。。

https://www.cnblogs.com/goldsunshine/p/8872623.html

https://lingxiankong.github.io/2013-12-23-python-setup.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
打包 Python 程序为 RPM ,需要使用 rpmbuild 命令。以下是打包 Python 程序为 RPM 的步骤: 1. 安装必要的工具和依赖项: ``` sudo yum install rpm-build rpmdevtools python-setuptools ``` 2. 创建 RPM 基础目录结构: ``` rpmdev-setuptree ``` 3. 在 rpm 目录下创建 `SPECS` 目录,并在其中创建 `.spec` 文件,例如 `mypython.spec`: ``` mkdir -p ~/rpmbuild/SPECS cd ~/rpmbuild/SPECS touch mypython.spec ``` 4. 编写 `.spec` 文件,例如: ``` Name: mypython Version: 1.0 Release: 1%{?dist} Summary: A python program License: GPL URL: https://example.com Source0: %{name}-%{version}.tar.gz BuildRequires: python-devel Requires: python %description This is a python program. %prep %setup -q %build python setup.py build %install python setup.py install --root %{buildroot} %files %defattr(-,root,root) %doc README.md %{python_sitelib}/* %changelog ``` 其中,各个字段的含义如下: - `Name`:名 - `Version`:版本 - `Release`:发布号,一般为1 - `Summary`:简单描述 - `License`:许可证 - `URL`:项目的 URL - `Source0`:源代码文件名 - `BuildRequires`:构建时需要的依赖项 - `Requires`:运行时需要的依赖项 - `%description`:详细描述 - `%prep`:准备阶段,解压源代码 - `%build`:编译阶段,执行 `setup.py build` - `%install`:安装阶段,执行 `setup.py install` - `%files`:文件列表 - `%defattr`:文件权限 - `%doc`:文档列表 - `%{python_sitelib}`:Python 安装路径 - `%changelog`:变更日志 5. 准备源代码,可以使用 `setup.py sdist` 命令生成。 6. 执行以下命令生成 RPM : ``` rpmbuild -bb ~/rpmbuild/SPECS/mypython.spec --define "_topdir ~/rpmbuild" --clean ``` 其中,`--define "_topdir ~/rpmbuild"` 参数指定 RPM 的根目录,`--clean` 参数表示在构建之前清理旧的构建结果。 7. RPM 将被生成在 `~/rpmbuild/RPMS` 目录中。 注意,打包过程中可能会出现依赖项未满足等错误,需要根据实际情况进行处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值