首页 > 编程语言 >python2项目打包rpm笔记

python2项目打包rpm笔记

时间:2022-12-18 20:22:45浏览次数:45  
标签:__ -- demo setup python define rpm 打包 python2

python2项目打包成rpm包

项目目录结构和说明

# 其中demo的是项目的根目录
# pkg是代码逻辑目录
# config是配置文件目录
# main.py是项目的开始目录
# Makefile是打包文件
# demo.spce是打包的具体步骤脚本
# setup.cfg和setup.py是python包的规范
-demo
--pkg1
----__init__.py
----...
--config
----...
--main.py
--Makefile
--demo.spec
--setup.cfg
--setup.py

setup.cfg和setup.py

# setup.cfg 示例
[metadata]
name=demo
version=1.0.0
url=http://example.com
author=author
description=description
long_description=

[options]
python_requires= >=2.7
packages= find:
scripts=
    main.py
include_package_data=True
install_requires=
  requests
  ....

[options.entry_points]
console_scripts = 
    democli =   packageName.moduleName:funcName

[options.package_data]
config= *

[easy_install]
index_url = https://mirrors.ustc.edu.cn/pypi/web/simple

[options.packages.find]
exclude = 
  .gitignore
  .git
  ...

# setup.py示例
from setuptools import setup

if __name__ == "__main__":
  setup()

Makefile示例

APP_DIR_PATH  := ${CURDIR}
DIRNAME          := $(notdir ${APP_DIR_PATH})
OBJECT_NAME := ${DIR_NAME}
RPM_TOP_DIR  := $(shell rpm -E %{_topdir})

VERSION.        := $(shell git descibe --tags --abbrev=6 2>/dev/null | sed -e 's/-/~/g')
RELEASE        := 1
RPM_SPEC     := demo.spec

.PHONY: clean rpm test

clean:
    rm -rf build demo.egg-info *~ *.swp *.pyc
    find . -type d --name __pycache__ -exec rm -rf {} +

rpm:
  mkdir -p ${RPM_TOP_DIR}/SPES
  mkdir -p ${RPM_TOP_DIR}/SOURCES
  cp ${RPM_SPEC} ${RPM_TOP_DIR}/SPECS/
  tar --exclude .git --exclude .venv --exclude env --exclude build --exclude *.egg-info -cvzf ${RPM_TOP_DIR}/SOURCES/${OBJECT_NAME}-${VERSION}.tar.gz  -C ${APP_DIR_PATH}/ ./;

  rpmbuild --bb --define "_version ${VERSION}" --define "_release ${RELEASE}" ${PRM_TOP_DIR}/SPECS/${RPM_SPEC}

demo.spec示例

Name: demo
Version:1.0.0
Release:2%{?dist}
Summary: summary
BuildArch: noarch
Group: application program/Base
License: 
URL: http://example.com
Source: %{name}-%{version}.tar.gz

BuildRequires: gcc gcc-c++
BuildRequires: python

Requires: sudo
Requires: thrift

%define _python_bytecompile_errors_terminate_build 0
%define _unpackaged_files_terminate_build 0
%define _binaries_in_noarch_packages_terminate_build 0

%define __python %{_bindir}/python
%define _objdir %{_bindir}/demo/%{name}
%define _confdir %{_sysconfdir}/%{name}
%define logdir /var/log/%{name}

%define username demo
%define groupname demo

%define pypi_index https://mirrors.ustc.edu.cn/pypi/web/simple

%description

%prep
%setup -c -n %{name}-%{version}

%build
rm -rf %{objdir}/.venv
%{__python} -m pip install virtualenv -i %{pypi_index}
%{__python} -m pip install --upgrade pip -i %{pypi_index}
%{__python} -m pip install --upgrade setuptools -i %{pypi_index}
virtualenv --python=%{__python} %{objdir}/.venv
%{objdir}/.venv/bin/python setup.py build

% install
rm -rf %{buildroot}
# install
%{objdir}/.venv/bin/python setup.py install
mkdir -p %{buildroot}%{_bindir}
ln -s %{objdir}/.venv/bin/%{name} %{buildroot}%{_bindir}/%{name}
# .venv
mkdir -p %{buildroot}%{objdir}
cp -r %{objdir}/.venv %{buildroot}%{objdir}
# config
mkdir -p %{buildroot}%{confdir}
mkdir -p %{buildroot}%{_sysconfdir}/log.d
cp -f config/demo.conf %{buildroot}%{confdir}
cp -f config/demo.log %{buildroot}%{_sysconfdir}/log.d
# log path
mkdir -p %{buildroot}%{logdir}

%pre
# 升级钱配置操作,如数据备份等

%post
grep -r "demo" /etc/sudoers > /dev/null 2>&1
if [ $? -ne 0 ];then
  echo "demo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
fi

%preun
if test $1 = 0;then
  sed -i '/demo/d' /etc/sudoers
fi

%clean
rm -f %{buildroot}

%files
%defattr(-,%{username},%{groupname},-)
%{logdir}
%{_binddir}/%{name}
%{objdir}/
%config(noreplace) %{confdir}/demo.conf
%config %{_sysconfdir}/log.d/demo.logtate

%changelog


标签:__,--,demo,setup,python,define,rpm,打包,python2
From: https://www.cnblogs.com/simple-record/p/16990866.html

相关文章

  • maven打包附带依赖的配置
    <build><plugins><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><de......
  • NSSM打包工具使用
    参考链接:https://blog.csdn.net/liyou123456789/article/details/123094277......
  • python24
    Python 变量类型变量是存储在内存中的值,这就意味着在创建变量时会在内存中开辟一个空间。基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。......
  • python25
    Python 变量类型变量是存储在内存中的值,这就意味着在创建变量时会在内存中开辟一个空间。基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。......
  • python26
    多个变量赋值Python允许你同时为多个变量赋值。例如:a=b=c=1以上实例,创建一个整型对象,值为1,三个变量被分配到相同的内存空间上。您也可以为多个对象指定多个变量......
  • python27
    标准数据类型在内存中存储的数据可以有多种类型。例如,一个人的年龄可以用数字来存储,他的名字可以用字符来存储。Python定义了一些标准类型,用于存储各种类型的数据。Py......
  • python28
    Python数字数字数据类型用于存储数值。他们是不可改变的数据类型,这意味着改变数字数据类型会分配一个新的对象。当你指定一个值时,Number对象就会被创建:var1=1var2......
  • python29
    Python列表List(列表)是Python中使用最频繁的数据类型。列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(即嵌套)。列表用 [] 标识,是......
  • python20
    Python空行函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。空行与代码缩进不同,空行并不是Python语......
  • python21
    同一行显示多条语句Python可以在同一行中使用多条语句,语句之间使用分号(;)分割,以下是一个简单的实例: #!/usr/bin/pythonimportsys;x='runoob';sys.stdout.write......