教程文档: 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.