-
Notifications
You must be signed in to change notification settings - Fork 3
/
setup.py
116 lines (100 loc) · 3.77 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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# Pyctools - a picture processing algorithm development kit.
# http://github.com/jim-easterbrook/pyctools
# Copyright (C) 2014-23 Pyctools contributors
#
# This file is part of Pyctools.
#
# Pyctools is free software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# Pyctools is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Pyctools. If not, see <http://www.gnu.org/licenses/>.
from distutils.command.upload import upload
import numpy
import os
from setuptools import setup
from setuptools import __version__ as setuptools_version
import sys
# import Cython after distutils/setuptools
from Cython.Build import cythonize
version = '0.6.0'
# import common Pyctools setup
with open(os.path.join('src', 'pyctools', 'setup.py')) as f:
exec(f.read())
# find packages
packages = find_packages()
# Make sure each package is a "pkgutil-style namespace package"
# See https://packaging.python.org/guides/packaging-namespace-packages/
write_init_files(packages)
console_scripts = []
for name in os.listdir(os.path.join('src', 'pyctools', 'tools')):
base, ext = os.path.splitext(name)
if name.startswith('_') or ext != '.py':
continue
console_scripts.append(
'pyctools-{name} = pyctools.tools.{name}:main'.format(name=base))
ext_modules = cythonize(find_ext_modules(), compiler_directives={
'language_level' : sys.version_info[0]})
# Add / modify setuptools commands
cmdclass = {}
# modify upload command to add appropriate tag
# requires GitPython - 'sudo pip install gitpython'
try:
import git
except ImportError:
pass
else:
class upload_and_tag(upload):
def run(self):
tag_path = 'v%s' % version
message = '%s\n\n' % tag_path
with open('CHANGELOG.txt') as f:
while not f.readline().startswith('Changes'):
pass
while True:
line = f.readline().strip()
if not line:
break
message += line + '\n'
repo = git.Repo()
tag = repo.create_tag(tag_path, message=message)
remote = repo.remotes.origin
remote.push(tags=True)
return upload.run(self)
cmdclass['upload'] = upload_and_tag
setup_kwds = {
'ext_modules': ext_modules,
'packages': packages,
'package_dir': {'' : 'src'},
'entry_points': {
'console_scripts' : console_scripts,
},
'cmdclass': cmdclass,
}
if tuple(map(int, setuptools_version.split('.'))) < (61, 0):
# get metadata from pyproject.toml
import toml
metadata = toml.load('pyproject.toml')
with open(metadata['project']['readme']) as ldf:
long_description = ldf.read()
setup_kwds.update(
name = metadata['project']['name'],
version = metadata['project']['version'],
description = metadata['project']['description'],
long_description = long_description,
author = metadata['project']['authors'][0]['name'],
author_email = metadata['project']['authors'][0]['email'],
url = metadata['project']['urls']['homepage'],
classifiers = metadata['project']['classifiers'],
platforms = metadata['tool']['setuptools']['platforms'],
license = metadata['project']['license']['text'],
zip_safe = metadata['tool']['setuptools']['zip-safe'],
)
setup(**setup_kwds)