|
8 | 8 | from setuptools import setup, find_packages, __version__ as setuptools_version
|
9 | 9 | from pkg_resources import parse_version
|
10 | 10 |
|
11 |
| -if parse_version(setuptools_version) < parse_version("18.5"): |
12 |
| - print("html5lib requires setuptools version 18.5 or above; " |
13 |
| - "please upgrade before installing (you have %s)" % setuptools_version) |
14 |
| - sys.exit(1) |
| 11 | +import pkg_resources |
| 12 | + |
| 13 | +try: |
| 14 | + import _markerlib.markers |
| 15 | +except ImportError: |
| 16 | + _markerlib = None |
| 17 | + |
| 18 | + |
| 19 | +# _markerlib.default_environment() obtains its data from _VARS |
| 20 | +# and wraps it in another dict, but _markerlib_evaluate writes |
| 21 | +# to the dict while it is iterating the keys, causing an error |
| 22 | +# on Python 3 only. |
| 23 | +# Replace _markerlib.default_environment to return a custom dict |
| 24 | +# that has all the necessary markers, and ignores any writes. |
| 25 | + |
| 26 | +class Python3MarkerDict(dict): |
| 27 | + |
| 28 | + def __setitem__(self, key, value): |
| 29 | + pass |
| 30 | + |
| 31 | + def pop(self, i=-1): |
| 32 | + return self[i] |
| 33 | + |
| 34 | + |
| 35 | +if _markerlib and sys.version_info[0] == 3: |
| 36 | + env = _markerlib.markers._VARS |
| 37 | + for key in list(env.keys()): |
| 38 | + new_key = key.replace('.', '_') |
| 39 | + if new_key != key: |
| 40 | + env[new_key] = env[key] |
| 41 | + |
| 42 | + _markerlib.markers._VARS = Python3MarkerDict(env) |
| 43 | + |
| 44 | + def default_environment(): |
| 45 | + return _markerlib.markers._VARS |
| 46 | + |
| 47 | + _markerlib.default_environment = default_environment |
| 48 | + |
| 49 | +# Avoid the very buggy pkg_resources.parser, which doesnt consistently |
| 50 | +# recognise the markers needed by this setup.py |
| 51 | +# Change this to setuptools 20.10.0 to support all markers. |
| 52 | +if pkg_resources: |
| 53 | + if parse_version(setuptools_version) < parse_version('18.5'): |
| 54 | + MarkerEvaluation = pkg_resources.MarkerEvaluation |
| 55 | + |
| 56 | + del pkg_resources.parser |
| 57 | + pkg_resources.evaluate_marker = MarkerEvaluation._markerlib_evaluate |
| 58 | + MarkerEvaluation.evaluate_marker = MarkerEvaluation._markerlib_evaluate |
15 | 59 |
|
16 | 60 | classifiers = [
|
17 | 61 | 'Development Status :: 5 - Production/Stable',
|
|
60 | 104 | install_requires=[
|
61 | 105 | 'six',
|
62 | 106 | 'webencodings',
|
63 |
| - 'setuptools>=18.5' |
64 | 107 | ],
|
65 | 108 | extras_require={
|
66 | 109 | # A empty extra that only has a conditional marker will be
|
|
0 commit comments