Migrate to pyproject.toml

This commit is contained in:
Branch Vincent 2024-10-20 11:32:23 -07:00
parent 73fd34e588
commit 44ae3e5f0b
No known key found for this signature in database
5 changed files with 101 additions and 165 deletions

View File

@ -4,7 +4,6 @@ include =
*glances*
omit =
setup.py
glances/outputs/*
glances/exports/*
glances/compat.py

View File

@ -341,9 +341,7 @@ To install Glances from source:
.. code-block:: console
$ wget https://github.com/nicolargo/glances/archive/vX.Y.tar.gz -O - | tar xz
$ cd glances-*
# python setup.py install
$ pip install https://github.com/nicolargo/glances/archive/vX.Y.tar.gz
*Note*: Python headers are required to install psutil.

View File

@ -15,11 +15,15 @@ import platform
import signal
import sys
import tracemalloc
from importlib import metadata
# Global name
# Version should start and end with a numerical char
# See https://packaging.python.org/specifications/core-metadata/#version
__version__ = '4.3.0_dev01'
try:
__version__ = metadata.version("glances")
except metadata.PackageNotFoundError:
__version__ = "0.0.0+unknown"
__apiversion__ = '4'
__author__ = 'Nicolas Hennion <nicolas@nicolargo.com>'
__license__ = 'LGPLv3'

View File

@ -1,3 +1,93 @@
[project]
name = "Glances"
version = "4.3.0_dev01"
description = "A cross-platform curses-based monitoring tool"
keywords = ["cli", "curses", "monitoring", "system"]
readme = "README.rst"
authors = [{ name = "Nicolas Hennion", email = "nicolas@nicolargo.com" }]
classifiers = [
"Development Status :: 5 - Production/Stable",
"Environment :: Console :: Curses",
"Environment :: Web Environment",
"Framework :: FastAPI",
"Intended Audience :: Developers",
"Intended Audience :: End Users/Desktop",
"Intended Audience :: System Administrators",
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: System :: Monitoring",
]
requires-python = ">=3.8"
dependencies = [
"defusedxml",
"packaging",
"psutil>=5.6.7",
"fastapi>=0.82.0; platform_system == 'Windows'",
"uvicorn; platform_system == 'Windows'",
"jinja2; platform_system == 'Windows'",
"requests; platform_system == 'Windows'",
]
license = { text = "LGPLv3" }
urls.Homepage = "https://github.com/nicolargo/glances"
[project.optional-dependencies]
action = ["chevron"]
browser = ["zeroconf>=0.19.1"]
cloud = ["requests"]
containers = ["docker>=6.1.1", "packaging", "podman", "python-dateutil", "six"]
export = [
"bernhard",
"cassandra-driver",
"elasticsearch",
"graphitesender",
"ibmcloudant",
"influxdb-client",
"influxdb>=1.0.0",
"kafka-python",
"paho-mqtt",
"pika",
"potsdb",
"prometheus_client",
"pymongo",
"pyzmq",
"statsd",
]
gpu = ["nvidia-ml-py"]
graph = ["pygal"]
ip = ["netifaces"]
raid = ["pymdstat"]
sensors = ["batinfo; platform_system == 'Linux'"]
smart = ["pySMART.smartx"]
snmp = ["pysnmp"]
sparklines = ["sparklines"]
web = ["fastapi>=0.82.0", "jinja2", "requests", "uvicorn"]
wifi = ["wifi"]
all = ["glances[action,browser,cloud,containers,export,gpu,graph,ip,raid,sensors,smart,snmp,sparklines,web,wifi]"]
[project.scripts]
glances = "glances:main"
[tool.setuptools.data-files]
"share/doc/glances" = [
"AUTHORS",
"COPYING",
"NEWS.rst",
"README.rst",
"SECURITY.md",
"CONTRIBUTING.md",
"conf/glances.conf",
]
"share/man/man1" = ["docs/man/glances.1"]
[tool.setuptools.packages.find]
include = ["glances*"]
[tool.ruff]
line-length = 120
target-version = "py38"
@ -65,4 +155,8 @@ dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
[tool.ruff.lint.mccabe]
# Unlike Flake8, default to a complexity level of 10.
max-complexity = 21
max-complexity = 21
[build-system]
requires = ["setuptools>=68"]
build-backend = "setuptools.build_meta"

159
setup.py
View File

@ -1,159 +0,0 @@
#!/usr/bin/env python
import builtins
import glob
import os
import re
import sys
from setuptools import Command, setup
# If the minimal Python version is changed then do not forget to change it in:
# - ./pyproject.toml
# - .github/workflows/test.yml
if not (sys.version_info >= (3, 8)):
print('Glances requires at least Python 3.8 to run.')
sys.exit(1)
# Global functions
##################
with builtins.open(os.path.join('glances', '__init__.py'), encoding='utf-8') as f:
version = re.search(r"^__version__ = ['\"]([^'\"]*)['\"]", f.read(), re.M).group(1)
if not version:
raise RuntimeError('Cannot find Glances version information.')
with builtins.open('README.rst', encoding='utf-8') as f:
long_description = f.read()
def get_data_files():
return [
(
'share/doc/glances',
['AUTHORS', 'COPYING', 'NEWS.rst', 'README.rst', "SECURITY.md", 'CONTRIBUTING.md', 'conf/glances.conf'],
),
('share/man/man1', ['docs/man/glances.1']),
]
def get_install_requires():
required = []
with open('requirements.txt') as f:
required = f.read().splitlines()
# On Windows, install WebUI by default
if sys.platform.startswith('win'):
required.append('fastapi>=0.82.0')
required.append('uvicorn')
required.append('jinja2')
required.append('requests')
return required
def get_install_extras_require():
extras_require = {
'action': ['chevron'],
'browser': ['zeroconf>=0.19.1'],
'cloud': ['requests'],
'containers': ['docker>=6.1.1', 'python-dateutil', 'six', 'podman', 'packaging'],
'export': [
'bernhard',
'cassandra-driver',
'elasticsearch',
'graphitesender',
'ibmcloudant',
'influxdb>=1.0.0',
'influxdb-client',
'pymongo',
'kafka-python',
'pika',
'paho-mqtt',
'potsdb',
'prometheus_client',
'pyzmq',
'statsd',
],
'gpu': ['nvidia-ml-py'],
'graph': ['pygal'],
'ip': ['netifaces'],
'raid': ['pymdstat'],
'smart': ['pySMART.smartx'],
'snmp': ['pysnmp'],
'sparklines': ['sparklines'],
'web': ['fastapi>=0.82.0', 'uvicorn', 'jinja2', 'requests'],
'wifi': ['wifi'],
}
if sys.platform.startswith('linux'):
extras_require['sensors'] = ['batinfo']
# Add automatically the 'all' target
extras_require['all'] = []
for p in extras_require.values():
extras_require['all'].extend(p)
return extras_require
class tests(Command):
user_options = []
def initialize_options(self):
pass
def finalize_options(self):
pass
def run(self):
import subprocess
import sys
for t in glob.glob('unittest-core.py'):
ret = subprocess.call([sys.executable, t]) != 0
if ret != 0:
raise SystemExit(ret)
raise SystemExit(0)
# Setup !
setup(
name='Glances',
version=version,
description="A cross-platform curses-based monitoring tool",
long_description=long_description,
author='Nicolas Hennion',
author_email='nicolas@nicolargo.com',
url='https://github.com/nicolargo/glances',
license='LGPLv3',
keywords="cli curses monitoring system",
python_requires=">=3.8",
install_requires=get_install_requires(),
extras_require=get_install_extras_require(),
packages=['glances'],
include_package_data=True,
data_files=get_data_files(),
cmdclass={'test': tests},
test_suite="unittest-core.py",
entry_points={"console_scripts": ["glances=glances:main"]},
classifiers=[
'Development Status :: 5 - Production/Stable',
'Environment :: Console :: Curses',
'Environment :: Web Environment',
'Framework :: FastAPI',
'Intended Audience :: Developers',
'Intended Audience :: End Users/Desktop',
'Intended Audience :: System Administrators',
'License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)',
'Operating System :: OS Independent',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Programming Language :: Python :: 3.10',
'Programming Language :: Python :: 3.11',
'Programming Language :: Python :: 3.12',
'Topic :: System :: Monitoring',
],
)