-
Notifications
You must be signed in to change notification settings - Fork 16
/
setup.py
125 lines (106 loc) · 3.38 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
117
118
119
120
121
122
123
124
125
import codecs
import glob
import inspect
import os
import re
from setuptools import setup
import sys
import time
import numpy.distutils.misc_util
# Directory of the current file
SETUP_DIRECTORY = os.path.dirname(os.path.abspath(inspect.getfile(
inspect.currentframe())))
LOCAL_PATH = os.path.join(SETUP_DIRECTORY, "setup.py")
NAME = "EikoNet"
VERSION = '0.1.0'
INCLUDE_DIRS = numpy.distutils.misc_util.get_numpy_include_dirs()
META_PATH = os.path.join("EikoNet", "__init__.py")
KEYWORDS = ["Seismic", "Travel-Time", "Analysis"]
CLASSIFIERS = [
"Development Status :: Beta",
"Intended Audience :: Geophysicist",
"Natural Language :: English",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3.6",
"Topic :: Scientific/Engineering",
]
INSTALL_REQUIRES = [
'pyproj',
'matplotlib',
'pandas',
'scipy',
'torch']
def read(*parts):
"""
Build an absolute path from *parts* and and return the contents of the
resulting file. Assume UTF-8 encoding.
"""
with codecs.open(os.path.join(SETUP_DIRECTORY, *parts),
"rb", "utf-8") as f:
return f.read()
def find_packages():
"""
Simple function to find all modules under the current folder.
"""
modules = []
for dirpath, _, filenames in os.walk(os.path.join(SETUP_DIRECTORY,
"EikoNet")):
if "__init__.py" in filenames:
modules.append(os.path.relpath(dirpath, SETUP_DIRECTORY))
return [_i.replace(os.sep, ".") for _i in modules]
META_FILE = read(META_PATH)
def find_meta(meta):
"""
Extract __*meta*__ from META_FILE.
"""
meta_match = re.search(
r"^__{meta}__ = ['\"]([^'\"]*)['\"]".format(meta=meta),
META_FILE, re.M
)
if meta_match:
return meta_match.group(1)
raise RuntimeError("Unable to find __{meta}__ string.".format(meta=meta))
def setup_package():
"""Setup package"""
setup(
name="EikoNet",
version=VERSION,
description=find_meta("description"),
long_description=read("README.rst"),
author=find_meta("author"),
author_email=find_meta("email"),
maintainer=find_meta("author"),
maintainer_email=find_meta("email"),
classifiers=CLASSIFIERS,
keywords=KEYWORDS,
packages=find_packages(),
zip_safe=False,
install_requires=INSTALL_REQUIRES,
include_package_data=True,
include_dirs=INCLUDE_DIRS,
package_data={"EikoNet": ["lib/*.so"]})
if __name__ == "__main__":
# clean --all does not remove extensions automatically
if 'clean' in sys.argv and '--all' in sys.argv:
import shutil
# delete complete build directory
path = os.path.join(SETUP_DIRECTORY, 'build')
try:
shutil.rmtree(path)
except Exception:
pass
# delete all shared libs from lib directory
path = os.path.join(SETUP_DIRECTORY, 'EikoNet', 'lib')
for filename in glob.glob(path + os.sep + '*.pyd'):
try:
os.remove(filename)
except Exception:
pass
for filename in glob.glob(path + os.sep + '*.so'):
try:
os.remove(filename)
except Exception:
pass
else:
setup_package()