教程文档: https://docs.python.org/2/distutils/index.html
Since setuptools no longer serves as the default build tool, one must explicitly opt in (by providing a pyproject.toml file) to use this library website
pyproject.toml
[build-system]requires = ["setuptools>=40.1","wheel"]build-backend = "setuptools.build_meta"
setup.py
from setuptools import setup
setup()
setup.cfg
[metadata]
name = lico-core-base
version = 6.2.0
license = Lenovo
classifiers =
Development Status :: 5 - Production/Stable
Programming Language :: Python :: 3
Programming Language :: Python :: 3.6
Operating System :: POSIX
Operating System :: POSIX :: Linux
[options]
python_requires = >=3.6
namespace_packages=
lico
lico.core
packages = find_namespace:
include_package_data = true
zip_safe = false
install_requires =
setuptools>=39.2
Django~=2.2.12
djangorestframework~=3.11
toml~=0.10
py~=1.5
celery~=4.1
APScheduler>=3.3.1
python-dateutil>=2.6.1
[options.packages.find]
include = lico.core.*
[options.data_files]
etc/lico =
etc/lico.ini
etc/lico.paste.ini
etc/lico.supervisor.ini
etc/lico/lico.supervisor.d =
etc/lico.supervisor.d/lico-core-base.ini
etc/lico.supervisor.d/lico-core-beat.ini
etc/lico/lico.logging.d =
etc/lico.logging.d/lico-base.ini
etc/lico.logging.d/lico-beat.ini
[options.entry_points]
console_scripts =
lico = lico.core.base.main:main [executable]
paste.app_factory =
main = lico.core.base.wsgi:make_application
[options.extras_require]
executable =
gunicorn>=20
supervisor>=3.3.4
PasteDeploy>=1.5
PyMySQL>=0.8
concurrent-log-handler>=0.9.16
lico-auth
lico-password-tool
test =
pytest>=4.1.0
pytest-cov>=2.5
pytest-mock>=3.0
pytest-django>=3.1
pytest-pythonpath>=0.7
[tool:pytest]
django_find_project = false
addopts =
--ds=tests.django_settings
--cov --cov-report term-missing --no-cov-on-fail --cov-fail-under=99
norecursedirs = dist build .tox
testpaths = tests/
[flake8]
max-complexity = 10
show-source = true
[isort]
combine_as_imports = true
default_section = THIRDPARTY
include_trailing_comma = true
known_first_party = lico
multi_line_output = 5
[coverage:run]
source = lico
omit =
[coverage:report]
exclude_lines =
pass$
import .+$
from .* import .+$
pragma: no cover
MANIFEST.ini
Sometimes this is enough, but usually you will want to specify additional files to distribute. The typical way to do this is to write a manifest template, called MANIFEST.in by default. The manifest template is just a list of instructions for how to generate your manifest file, MANIFEST, which is the exact list of files to include in your source distribution. The sdist command processes this template and generates a manifest based on its instructions and what it finds in the filesystem.
If you prefer to roll your own manifest file, the format is simple: one filename per line, regular files (or symlinks to them) only. If you do supply your own MANIFEST, you must specify everything: the default set of files described above does not apply in this case
Manifest instruction
编写规范: https://docs.python.org/2/distutils/sourcedist.html
include dev-requirements.txt
include tox.ini .bumpversion.cfg
include lico-core-base.spec
include LICENSE
graft etc
graft tests
prune etc/lico.ini.d
recursive-exclude * __pycache__
recursive-exclude * *.py[co]
dev-requirements.txt
bumpversion>=0.5
tox>=2.8
flake8>=3.4
flake8-isort>=2.2
isort>=4.2
tox.ini
[tox]
minversion = 3.3
isolated_build = true
envlist = py36, flake8
[testenv:flake8]
deps =
flake8>=3.4
flake8-isort>=2.2
skip_install = true
commands =
flake8 lico tests
[testenv]
setenv =
PIP_FIND_LINKS = http://files.ssw.lenovo.com/lico-pub/lico/repo/pip/
PIP_TRUSTED_HOST = files.ssw.lenovo.com
extras = test
commands =
pytest --basetemp={envtmpdir}
.bumpversion.cfg
[bumpversion]
current_version = 6.2.0
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)
serialize = {major}.{minor}.{patch}
[bumpversion:file:setup.cfg]
[bumpversion:file:lico-core-base.spec]
search = Version: {current_version}
replace = Version: {new_version}
[bumpversion:file:lico-core-base-libs.spec]
search = Version: {current_version}
replace = Version: {new_version}
lico-core-base.spec
https://docs.python.org/2/distutils/builtdist.html
rpm 打包指导: https://rpm-packaging-guide.github.io/#what-is-a-spec-file
# Copyright 2020-present Lenovo
# Confidential and Proprietary
%global flavor %{nil}
%if %{with host}
%global flavor host
%endif
%if %{with kube}
%global flavor kube
%endif
%if "%flavor" == ""
ExclusiveArch: do_not_build
%endif
%global pkg_name lico-core-base
Name: %{pkg_name}-%{flavor}
Version: 6.2.0
Release: 1%{?dist}
Summary: Restful server for lico project
License: Lenovo
URL: https://hpcgitlab.labs.lenovo.com/lico/lico-six/lico-core/lico-core-base
Source0: %{pkg_name}-%{version}.tar.gz
BuildArch: noarch
BuildRequires: lico-rpm-macros
%if 0%{?sles_version} || 0%{?suse_version}
BuildRequires: systemd-rpm-macros
%endif
%if 0%{?sles_version} || 0%{?suse_version}
Requires(pre): systemd
%endif
Requires(post): systemd
Requires(preun): systemd
Requires(postun): systemd
Requires: font(:lang=zh-cn)
Requires: font(:lang=en)
Requires: lico-core-base-libs = %{version}
Requires: lico-prepare-%{flavor} >= %{lico_ver}
Requires: lico-prepare-%{flavor} < %{lico_next_ver}
Provides: %{pkg_name} = %{version}-%{release}
Obsoletes: %{name} < %{version}-%{release}
Obsoletes: %{pkg_name} < %{version}-%{release}
%description
Restful server for lico project
%prep
%autosetup -n %{pkg_name}-%{version}
# Remove bundled egg-info
rm -rf %{pkg_name}.egg-info
%install
# config
%{__install} -Dp -m 644 etc/lico.%{flavor}.ini %{buildroot}%{_licoconfdir}/lico.ini
%{__install} -d %{buildroot}%{_licoconfdir}/lico.ini.d
%{__install} -Dp -m 644 etc/lico.paste.ini %{buildroot}%{_licoconfdir}/lico.paste.ini
%{__install} -Dp -m 644 etc/lico.logging.d/lico-beat.ini %{buildroot}%{_licologconfdir}/lico-beat.ini
%{__install} -Dp -m 644 etc/lico.logging.d/lico-base.ini %{buildroot}%{_licologconfdir}/lico-base.ini
sed -i 's;%%(ENV_LICO_RUN_FOLDER)s;%_licorundir;g' etc/lico.supervisor.ini etc/lico.supervisor.d/%{pkg_name}.ini
sed -i 's;%%(ENV_LICO_LOG_FOLDER)s;%_licologdir;g' etc/lico.supervisor.ini etc/lico.supervisor.d/%{pkg_name}.ini
sed -i 's;%%(ENV_LICO_STATE_FOLDER)s;%_licostatedir;g' etc/lico.supervisor.ini etc/lico.supervisor.d/%{pkg_name}.ini
sed -i 's;%%(ENV_LICO_CONFIG_FOLDER)s;%_licoconfdir;g' etc/lico.supervisor.ini etc/lico.supervisor.d/%{pkg_name}.ini
sed -i 's;%%(ENV_PYTHON_PREFIX)s;%_prefix;g' etc/lico.supervisor.ini etc/lico.supervisor.d/%{pkg_name}.ini
sed -i 's;%%(ENV_PYTHON_VERSION)s;%python3_version;g' etc/lico.supervisor.ini etc/lico.supervisor.d/%{pkg_name}.ini
%{__install} -Dp -m 644 etc/lico.supervisor.ini %{buildroot}%{_licoconfdir}/lico.supervisor.ini
%{__install} -Dp -m 0644 etc/lico.supervisor.d/%{pkg_name}.ini %{buildroot}%{_licoconfdir}/lico.supervisor.d/%{pkg_name}.ini
# runtime dir
%{__install} -d %{buildroot}%{_licostatedir}/core/
# service
%{__install} -Dp -m 0644 etc/lico.service %{buildroot}%{_unitdir}/lico.service
%{__install} -Dp -m 0644 etc/lico-beat.service %{buildroot}%{_unitdir}/lico-beat.service
%pre
%if 0%{?sles_version} || 0%{?suse_version}
%service_add_pre lico.service
%service_add_pre lico-beat.service
%endif
%post
%if 0%{?sles_version} || 0%{?suse_version}
%service_add_post lico.service
%service_add_post lico-beat.service
%else
%systemd_post lico.service
%systemd_post lico-beat.service
%endif
%preun
%if 0%{?sles_version} || 0%{?suse_version}
%service_del_preun lico.service
%service_del_preun lico-beat.service
%else
%systemd_preun lico.service
%systemd_preun lico-beat.service
%endif
%postun
%if 0%{?sles_version} || 0%{?suse_version}
%service_del_postun lico.service
%service_del_postun lico-beat.service
%else
%systemd_postun_with_restart lico.service
%systemd_postun_with_restart lico-beat.service
%endif
%files
%defattr(-,root,root,-)
%license LICENSE
# config
%config(noreplace) %{_licoconfdir}/lico.ini
%dir %{_licoconfdir}/lico.ini.d
%config(noreplace) %{_licoconfdir}/lico.paste.ini
%config(noreplace) %{_licoconfdir}/lico.supervisor.ini
%dir %{_licoconfdir}/lico.supervisor.d/
%config(noreplace) %{_licoconfdir}/lico.supervisor.d/%{pkg_name}.ini
%config(noreplace) %{_licologconfdir}/lico-beat.ini
%config(noreplace) %{_licologconfdir}/lico-base.ini
# service
%{_unitdir}/lico.service
%{_unitdir}/lico-beat.service
# runtime dir
%{_licostatedir}/core
%changelog
* Thu Dec 14 2020 Liang Wang <wangliang23@lenovo.com> - 6.2.0-1
- Upgrade to 6.2.0.
* Fri Apr 17 2020 Yunfei Shi <shiyf2@lenovo.com> - 1.0.0-1
- Initial package.
LICENSE
All Rights Reserved. 2020-present Lenovo Corp.
