-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsetup.py
More file actions
148 lines (129 loc) · 4.98 KB
/
setup.py
File metadata and controls
148 lines (129 loc) · 4.98 KB
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
import os
import os.path as osp
import shutil
import sys
import warnings
from setuptools import find_packages, setup
def readme():
"""Load README.md."""
with open("README.md", encoding="utf-8") as f:
return f.read()
def parse_requirements(fname="requirements.txt", with_version=True):
"""Parse a requirements.txt file."""
import re
from os.path import exists
require_fpath = fname
def parse_line(line):
if line.startswith("-r "):
target = line.split(" ")[1]
for info in parse_require_file(target):
yield info
else:
info = {"line": line}
if line.startswith("-e "):
info["package"] = line.split("#egg=")[1]
elif "@git+" in line:
info["package"] = line
else:
pat = "(" + "|".join([">=", "==", ">"]) + ")"
parts = re.split(pat, line, maxsplit=1)
parts = [p.strip() for p in parts]
info["package"] = parts[0]
if len(parts) > 1:
op, rest = parts[1:]
if ";" in rest:
version, platform_deps = map(str.strip, rest.split(";"))
info["platform_deps"] = platform_deps
else:
version = rest
info["version"] = (op, version)
yield info
def parse_require_file(fpath):
with open(fpath, "r") as f:
for line in f.readlines():
line = line.strip()
if line and not line.startswith("#"):
for info in parse_line(line):
yield info
def gen_packages_items():
if exists(require_fpath):
for info in parse_require_file(require_fpath):
parts = [info["package"]]
if with_version and "version" in info:
parts.extend(info["version"])
platform_deps = info.get("platform_deps")
if platform_deps is not None:
parts.append(";" + platform_deps)
yield "".join(parts)
return list(gen_packages_items())
def add_mim_extension():
"""Add extra files required by MIM by either symlink or copy."""
if "develop" in sys.argv:
mode = "symlink"
elif "sdist" in sys.argv or "bdist_wheel" in sys.argv:
mode = "copy"
else:
return
filenames = ["tools", "configs", "demo", "model-index.yml"]
repo_path = osp.dirname(__file__)
mim_path = osp.join(repo_path, "mmrotate", ".mim")
os.makedirs(mim_path, exist_ok=True)
for filename in filenames:
if osp.exists(filename):
src_path = osp.join(repo_path, filename)
tar_path = osp.join(mim_path, filename)
if osp.isfile(tar_path) or osp.islink(tar_path):
os.remove(tar_path)
elif osp.isdir(tar_path):
shutil.rmtree(tar_path)
if mode == "symlink":
src_relpath = osp.relpath(src_path, osp.dirname(tar_path))
try:
os.symlink(src_relpath, tar_path)
except OSError:
mode = "copy"
warnings.warn(
f"Failed to create symlink for {src_relpath}; switching to copy."
)
else:
continue
if mode == "copy":
if osp.isfile(src_path):
shutil.copyfile(src_path, tar_path)
elif osp.isdir(src_path):
shutil.copytree(src_path, tar_path)
else:
warnings.warn(f"Cannot copy file: {src_path}")
else:
raise ValueError(f"Invalid mode: {mode}")
if __name__ == "__main__":
add_mim_extension()
setup(
name="abbspo",
version="0.1.0",
description=(
"ABBSPO: Adaptive Bounding Box Scaling and Symmetric Prior Based "
"Orientation Prediction for Detecting Aerial Image Objects"
),
long_description=readme(),
long_description_content_type="text/markdown",
author="ABBSPO Authors",
author_email="",
keywords="computer vision, oriented object detection, weak supervision",
url="https://github.com/KAIST-VICLab/ABBSPO",
packages=find_packages(exclude=("configs", "tools", "demo", "docs")),
include_package_data=True,
classifiers=[
"Development Status :: 4 - Beta",
"License :: OSI Approved :: Apache Software License",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.8",
],
license="Apache License 2.0",
install_requires=parse_requirements("requirements.txt"),
extras_require={
"all": parse_requirements("requirements.txt"),
},
zip_safe=False,
)