-
Notifications
You must be signed in to change notification settings - Fork 157
/
setup.py
executable file
·95 lines (79 loc) · 2.47 KB
/
setup.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/usr/bin/env python3
# To install `nvitop` with specific version of `nvidia-ml-py`, use:
#
# pip install nvidia-ml-py==xx.yyy.zz nvitop
#
# or
#
# pip install 'nvitop[pynvml-xx.yyy.zz]'
#
"""Setup script for ``nvitop``."""
from __future__ import annotations
import contextlib
import re
import sys
from importlib.util import module_from_spec, spec_from_file_location
from pathlib import Path
from typing import TYPE_CHECKING, Generator
from setuptools import setup
if TYPE_CHECKING:
from types import ModuleType
HERE = Path(__file__).absolute().parent
@contextlib.contextmanager
def vcs_version(name: str, path: Path | str) -> Generator[ModuleType]:
"""Context manager to update version string in a version module."""
path = Path(path).absolute()
assert path.is_file()
module_spec = spec_from_file_location(name=name, location=path)
assert module_spec is not None
assert module_spec.loader is not None
module = sys.modules.get(name)
if module is None:
module = module_from_spec(module_spec)
sys.modules[name] = module
module_spec.loader.exec_module(module)
if module.__release__:
yield module
return
content = None
try:
try:
content = path.read_text(encoding='utf-8')
path.write_text(
data=re.sub(
r"""__version__\s*=\s*('[^']+'|"[^"]+")""",
f'__version__ = {module.__version__!r}',
string=content,
),
encoding='utf-8',
)
except OSError:
content = None
yield module
finally:
if content is not None:
with path.open(mode='wt', encoding='utf-8', newline='') as file:
file.write(content)
with vcs_version(
name='nvitop.version',
path=HERE / 'nvitop' / 'version.py',
) as version:
setup(
name='nvitop',
version=version.__version__,
extras_require={
'lint': [
'black >= 24.0.0, < 25.0.0a0',
'pylint[spelling]',
'mypy',
'typing-extensions',
'pre-commit',
],
'cuda10': ['nvidia-ml-py == 11.450.51'],
**{
# The identifier could not start with numbers, add a prefix `pynvml-`
f'pynvml-{pynvml}': [f'nvidia-ml-py == {pynvml}']
for pynvml in version.PYNVML_VERSION_CANDIDATES
},
},
)