forked from pypa/virtualenv
-
Notifications
You must be signed in to change notification settings - Fork 0
/
setup.py
127 lines (108 loc) · 4.18 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
import os
import re
import sys
if sys.version_info[:2] < (2, 7):
sys.exit("virtualenv requires Python 2.7 or higher.")
try:
from setuptools import setup, find_packages
from setuptools.command.test import test as TestCommand
class PyTest(TestCommand):
user_options = [("pytest-args=", "a", "Arguments to pass to py.test")]
def initialize_options(self):
TestCommand.initialize_options(self)
self.pytest_args = []
def finalize_options(self):
TestCommand.finalize_options(self)
# self.test_args = []
# self.test_suite = True
def run_tests(self):
# import here, because outside the eggs aren't loaded
import pytest
sys.exit(pytest.main(self.pytest_args))
setup_params = {
"entry_points": {"console_scripts": ["virtualenv=virtualenv:main"]},
"zip_safe": False,
"cmdclass": {"test": PyTest},
"tests_require": ["pytest", "mock"],
}
except ImportError:
from distutils.core import setup
if sys.platform == "win32":
print("Note: without Setuptools installed you will " 'have to use "python -m virtualenv ENV"')
setup_params = {}
else:
script = "src/scripts/virtualenv"
setup_params = {"scripts": [script]}
def read_file(*paths):
here = os.path.dirname(os.path.abspath(__file__))
with open(os.path.join(here, *paths)) as f:
return f.read()
# Get long_description from index.rst:
long_description_full = read_file("docs", "index.rst")
long_description = long_description_full.strip().split("split here", 1)[0]
# Add release history
changes = read_file("docs", "changes.rst")
# Only report last two releases for brevity
releases_found = 0
change_lines = []
for line in changes.splitlines():
change_lines.append(line)
if line.startswith("--------------"):
releases_found += 1
if releases_found > 2:
break
changes = "\n".join(change_lines[:-2]) + "\n"
changes += "`Full Changelog <https://virtualenv.pypa.io/en/latest/changes.html>`_."
# Replace issue/pull directives
changes = re.sub(r":pull:`(\d+)`", r"PR #\1", changes)
changes = re.sub(r":issue:`(\d+)`", r"#\1", changes)
long_description += "\n\n" + changes
def get_version():
version_file = read_file(os.path.join("src", "virtualenv.py"))
version_match = re.search(r"^__version__ = ['\"]([^'\"]*)['\"]", version_file, re.M)
if version_match:
return version_match.group(1)
raise RuntimeError("Unable to find version string.")
# Hack to prevent stupid TypeError: 'NoneType' object is not callable error on
# exit of python setup.py test # in multiprocessing/util.py _exit_function when
# running python setup.py test (see
# http://www.eby-sarna.com/pipermail/peak/2010-May/003357.html)
try:
import multiprocessing # noqa
except ImportError:
pass
setup(
name="virtualenv",
version=get_version(),
description="Virtual Python Environment builder",
long_description=long_description,
classifiers=[
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 2",
"Programming Language :: Python :: 2.7",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.4",
"Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
],
keywords="setuptools deployment installation distutils",
author="Ian Bicking",
author_email="[email protected]",
maintainer="Jannis Leidel, Carl Meyer and Brian Rosner",
maintainer_email="[email protected]",
url="https://virtualenv.pypa.io/",
license="MIT",
package_dir={"": "src"},
py_modules=["virtualenv"],
packages=find_packages("src"),
package_data={"virtualenv_support": ["*.whl"]},
python_requires=">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*",
extras_require={
"testing": ["mock", "pytest >= 3.0.0, <4", "pytest-cov >= 2.5.1, <3", "pytest-timeout >= 1.3.0, <2"],
"docs": ["sphinx >= 1.8.0, < 2"],
},
**setup_params
)