-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathsetup.py
150 lines (114 loc) · 4.45 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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
import io
__author__ = "tcaruso"
# !/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
from shutil import rmtree
from setuptools import find_packages, setup, Command
try:
from pip._internal.req import parse_requirements
from pip._internal.download import PipSession
except ImportError:
from pip.req import parse_requirements
from pip.download import PipSession
except Exception:
from pip import __version__ as __pip_version__
msg = """Sorry, could not install due to a pip import error. Please open an issue on the repo
with this message and the error so it can be addressed.
pip version: {}
python version: {}
""".format(
__pip_version__, ".".join(sys.version_info)
)
raise EnvironmentError(msg)
here = os.path.abspath(os.path.dirname(__file__))
# ------------------------------------------------
# Package meta-data.
# PACKAGE_NAME is the name of the package directory and the import path. If you use my_package then when installed, you
# will import the package like `import my_package`.
PACKAGE_NAME = "nhlstats"
DESCRIPTION = "Tools for collecting NHL play-by-play stats."
URL = "https://github.com/tomplex/nhlstats"
EMAIL = "carusot42@gmail.com"
AUTHOR = "Tom Caruso"
# The minimum Python version required
REQUIRES_PYTHON = (3, 5, 0)
# PYPI_NAME is the name of the package on pypi. You'll use this name to install the package.
PYPI_NAME = "{}".format(PACKAGE_NAME)
# ------------------------------------------------
# setup() info
about = {
"name": PACKAGE_NAME,
"description": DESCRIPTION,
"author": AUTHOR,
"author_email": EMAIL,
"url": URL,
"packages": find_packages(exclude=["tests", "*.tests", "*.tests.*", "tests.*"]),
"include_package_data": True,
"entry_points": {"console_scripts": ["nhl=nhlstats.cli.core:cli"],},
"classifiers": [
# Trove classifiers
# Full list: https://pypi.python.org/pypi?%3Aaction=list_classifiers
"Programming Language :: Python",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: Implementation :: CPython",
],
}
# ------------------------------------------------
# Check Python version we're installing against. Bail if it's not correct. This will blow up both when we build the
# package and when someone tries to install it.
if sys.version_info < REQUIRES_PYTHON:
# Raise if we're trying to install on an unsupported Python version
raise Exception(
"Package {} requires python >= {}.".format(
PYPI_NAME, ".".join(map(str, REQUIRES_PYTHON))
)
)
REQUIRES_PYTHON = ">=" + ".".join(map(str, REQUIRES_PYTHON))
# ------------------------------------------------
# Requirements gathering.
requirements = parse_requirements(
os.path.join(os.path.dirname(__file__), "requirements.txt"), session=PipSession()
)
about["install_requires"] = [str(req.req) for req in requirements]
# ------------------------------------------------
# Versions handling
version = {}
with open(os.path.join(here, PYPI_NAME, "__version__.py")) as f:
exec(f.read(), version)
about["version"] = version["__version__"]
# ------------------------------------------------
# description metadata
try:
with io.open(os.path.join(here, "README.md"), encoding="utf-8") as f:
about["long_description"] = "\n" + f.read()
about["long_description_content_type"] = "text/markdown"
except FileNotFoundError:
about["long_description"] = DESCRIPTION
class UploadCommand(Command):
"""Support setup.py upload."""
description = "Build and publish the package."
user_options = []
def initialize_options(self):
pass
def finalize_options(self):
pass
@staticmethod
def status(s):
"""Prints things in bold."""
print("\033[1m{0}\033[0m".format(s))
def run(self):
try:
self.status("Removing previous builds…")
rmtree(os.path.join(here, "dist"))
except OSError:
pass
self.status("Installing required build packages...")
os.system("{0} -m pip install wheel twine".format(sys.executable))
self.status("Building Source and Wheel (universal) distribution…")
os.system("{0} setup.py sdist bdist_wheel --universal".format(sys.executable))
self.status("Uploading the package to pypi via Twine…")
os.system("{0} -m twine upload dist/* ".format(sys.executable))
sys.exit()
setup(**about, cmdclass={"upload": UploadCommand,})