diff --git a/changelog/4149.feature.rst b/changelog/4149.feature.rst new file mode 100644 index 000000000..7f9908b15 --- /dev/null +++ b/changelog/4149.feature.rst @@ -0,0 +1 @@ +Require setuptools>=30.3 and move most of the metadata to ``setup.cfg``. diff --git a/pyproject.toml b/pyproject.toml index e82f051e1..c83bd853d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,7 @@ [build-system] requires = [ - "setuptools", + # sync with setup.py until we discard non-pep-517/518 + "setuptools>=30.3", "setuptools-scm", "wheel", ] diff --git a/setup.cfg b/setup.cfg index 816539e2e..a898b66c6 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,3 +1,55 @@ +[metadata] + +name = pytest +description = pytest: simple powerful testing with Python +long_description = file: README.rst +url = "https://docs.pytest.org/en/latest/" +project_urls = + Source=https://github.com/pytest-dev/pytest + Tracker=https://github.com/pytest-dev/pytest/issues + +author = Holger Krekel, Bruno Oliveira, Ronny Pfannschmidt, Floris Bruynooghe, Brianna Laugher, Florian Bruhin and others + +license = MIT license +license_file = LICENSE +keywords = test, unittest +classifiers = + Development Status :: 6 - Mature + Intended Audience :: Developers + License :: OSI Approved :: MIT License + Operating System :: POSIX + Operating System :: Microsoft :: Windows + Operating System :: MacOS :: MacOS X + Topic :: Software Development :: Testing + Topic :: Software Development :: Libraries + Topic :: Utilities + 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 +platforms = unix, linux, osx, cygwin, win32 + +[options] +zip_safe = no +packages = + _pytest + _pytest.assertion + _pytest._code + _pytest.mark + _pytest.config + +py_modules = pytest +python_requires = >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.* + + +[options.entry_points] +console_scripts = + pytest=pytest:main + py.test=pytest:main + [build_sphinx] source-dir = doc/en/ build-dir = doc/build @@ -13,8 +65,6 @@ universal = 1 ignore = _pytest/_version.py -[metadata] -license_file = LICENSE [devpi:upload] formats = sdist.tgz,bdist_wheel diff --git a/setup.py b/setup.py index 4c12fbfcc..6bab5312d 100644 --- a/setup.py +++ b/setup.py @@ -1,126 +1,34 @@ import os -import sys -import setuptools -import pkg_resources from setuptools import setup -classifiers = [ - "Development Status :: 6 - Mature", - "Intended Audience :: Developers", - "License :: OSI Approved :: MIT License", - "Operating System :: POSIX", - "Operating System :: Microsoft :: Windows", - "Operating System :: MacOS :: MacOS X", - "Topic :: Software Development :: Testing", - "Topic :: Software Development :: Libraries", - "Topic :: Utilities", -] + [ - ("Programming Language :: Python :: %s" % x) - for x in "2 2.7 3 3.4 3.5 3.6 3.7".split() + +# TODO: if py gets upgrade to >=1.6, +# remove _width_of_current_line in terminal.py +INSTALL_REQUIRES = [ + "py>=1.5.0", + "six>=1.10.0", + "setuptools", + "attrs>=17.4.0", + "more-itertools>=4.0.0", + "atomicwrites>=1.0", + 'funcsigs;python_version<"3.0"', + 'pathlib2>=2.2.0;python_version<"3.6"', + 'colorama;sys_platform=="win32"', ] -with open("README.rst") as fd: - long_description = fd.read() - -def get_environment_marker_support_level(): - """ - Tests how well setuptools supports PEP-426 environment marker. - - The first known release to support it is 0.7 (and the earliest on PyPI seems to be 0.7.2 - so we're using that), see: https://setuptools.readthedocs.io/en/latest/history.html#id350 - - The support is later enhanced to allow direct conditional inclusions inside install_requires, - which is now recommended by setuptools. It first appeared in 36.2.0, went broken with 36.2.1, and - again worked since 36.2.2, so we're using that. See: - https://setuptools.readthedocs.io/en/latest/history.html#v36-2-2 - https://github.com/pypa/setuptools/issues/1099 - - References: - - * https://wheel.readthedocs.io/en/latest/index.html#defining-conditional-dependencies - * https://www.python.org/dev/peps/pep-0426/#environment-markers - * https://setuptools.readthedocs.io/en/latest/setuptools.html#declaring-platform-specific-dependencies - """ - try: - version = pkg_resources.parse_version(setuptools.__version__) - if version >= pkg_resources.parse_version("36.2.2"): - return 2 - if version >= pkg_resources.parse_version("0.7.2"): - return 1 - except Exception as exc: - sys.stderr.write("Could not test setuptool's version: %s\n" % exc) - - # as of testing on 2018-05-26 fedora was on version 37* and debian was on version 33+ - # we should consider erroring on those - return 0 +# if _PYTEST_SETUP_SKIP_PLUGGY_DEP is set, skip installing pluggy; +# used by tox.ini to test with pluggy master +if "_PYTEST_SETUP_SKIP_PLUGGY_DEP" not in os.environ: + INSTALL_REQUIRES.append("pluggy>=0.7") def main(): - extras_require = {} - install_requires = [ - "py>=1.5.0", # if py gets upgrade to >=1.6, remove _width_of_current_line in terminal.py - "six>=1.10.0", - "setuptools", - "attrs>=17.4.0", - "more-itertools>=4.0.0", - "atomicwrites>=1.0", - ] - # if _PYTEST_SETUP_SKIP_PLUGGY_DEP is set, skip installing pluggy; - # used by tox.ini to test with pluggy master - if "_PYTEST_SETUP_SKIP_PLUGGY_DEP" not in os.environ: - install_requires.append("pluggy>=0.7") - environment_marker_support_level = get_environment_marker_support_level() - if environment_marker_support_level >= 2: - install_requires.append('funcsigs;python_version<"3.0"') - install_requires.append('pathlib2>=2.2.0;python_version<"3.6"') - install_requires.append('colorama;sys_platform=="win32"') - elif environment_marker_support_level == 1: - extras_require[':python_version<"3.0"'] = ["funcsigs"] - extras_require[':python_version<"3.6"'] = ["pathlib2>=2.2.0"] - extras_require[':sys_platform=="win32"'] = ["colorama"] - else: - if sys.platform == "win32": - install_requires.append("colorama") - if sys.version_info < (3, 0): - install_requires.append("funcsigs") - if sys.version_info < (3, 6): - install_requires.append("pathlib2>=2.2.0") - setup( - name="pytest", - description="pytest: simple powerful testing with Python", - long_description=long_description, use_scm_version={"write_to": "src/_pytest/_version.py"}, - url="https://docs.pytest.org/en/latest/", - project_urls={ - "Source": "https://github.com/pytest-dev/pytest", - "Tracker": "https://github.com/pytest-dev/pytest/issues", - }, - license="MIT license", - platforms=["unix", "linux", "osx", "cygwin", "win32"], - author=( - "Holger Krekel, Bruno Oliveira, Ronny Pfannschmidt, " - "Floris Bruynooghe, Brianna Laugher, Florian Bruhin and others" - ), - entry_points={"console_scripts": ["pytest=pytest:main", "py.test=pytest:main"]}, - classifiers=classifiers, - keywords="test unittest", - # the following should be enabled for release - setup_requires=["setuptools-scm"], + setup_requires=["setuptools-scm", "setuptools>=30.3"], package_dir={"": "src"}, - python_requires=">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", - install_requires=install_requires, - extras_require=extras_require, - packages=[ - "_pytest", - "_pytest.assertion", - "_pytest._code", - "_pytest.mark", - "_pytest.config", - ], - py_modules=["pytest"], - zip_safe=False, + install_requires=INSTALL_REQUIRES, )