summaryrefslogtreecommitdiff
path: root/setup.py
diff options
context:
space:
mode:
authorPierre Sassoulas <pierre.sassoulas@gmail.com>2021-04-04 11:17:52 +0200
committerPierre Sassoulas <pierre.sassoulas@gmail.com>2021-04-05 15:08:27 +0200
commite8b44339a28630e087373416e4e725e454ed025f (patch)
tree735b08c549409147c880bea205c3615d38265862 /setup.py
parentf46a1fc0e52512aae536a0b8f129b6c75b7ef8ca (diff)
downloadpylint-git-e8b44339a28630e087373416e4e725e454ed025f.tar.gz
Upgrade setup.py: move from distutil to setuptools
Move from os.path to pathlib.Path and use setuptools.find_packages(), remove pytest-runner from the setup (see https://pypi.org/project/pytest-runner/) remove the bin directory and scripts variable in pkginfo as entrypoint+setuptools does the job, remove cmd_class as it's a deprecated distutils features. Remove dependency links as we do not have any non public dependencies.
Diffstat (limited to 'setup.py')
-rw-r--r--setup.py197
1 files changed, 39 insertions, 158 deletions
diff --git a/setup.py b/setup.py
index 74738c915..1867f5990 100644
--- a/setup.py
+++ b/setup.py
@@ -1,166 +1,47 @@
-# Copyright (c) 2006, 2009-2010, 2012-2014 LOGILAB S.A. (Paris, FRANCE) <contact@logilab.fr>
-# Copyright (c) 2012 FELD Boris <lothiraldan@gmail.com>
-# Copyright (c) 2013 Benedikt Morbach <benedikt.morbach@googlemail.com>
-# Copyright (c) 2013 T.Rzepka <Tobias.Rzepka@gmail.com>
-# Copyright (c) 2014-2020 Claudiu Popa <pcmanticore@gmail.com>
-# Copyright (c) 2014 Pedro Algarvio <pedro@algarvio.me>
-# Copyright (c) 2014 Brett Cannon <brett@python.org>
-# Copyright (c) 2014 Google, Inc.
-# Copyright (c) 2014 Ricardo Gemignani <ricardo.gemignani@gmail.com>
-# Copyright (c) 2015 Ionel Cristian Maries <contact@ionelmc.ro>
-# Copyright (c) 2016 Florian Bruhin <me@the-compiler.org>
-# Copyright (c) 2017 Hugo <hugovk@users.noreply.github.com>
-# Copyright (c) 2019-2021 Pierre Sassoulas <pierre.sassoulas@gmail.com>
-# Copyright (c) 2019 Enji Cooper <yaneurabeya@gmail.com>
-# Copyright (c) 2019 Hugo van Kemenade <hugovk@users.noreply.github.com>
-# Copyright (c) 2019 Ashley Whetter <ashley@awhetter.co.uk>
-# Copyright (c) 2020 frostming <frostming@tencent.com>
-# Copyright (c) 2020 Frost Ming <mianghong@gmail.com>
-# Copyright (c) 2020 hippo91 <guillaume.peillex@gmail.com>
-# Copyright (c) 2020 Damien Baty <damien.baty@polyconseil.fr>
-# Copyright (c) 2020 Bryce Guinta <bryce.guinta@protonmail.com>
-# Copyright (c) 2020 Ville Skyttä <ville.skytta@iki.fi>
-# Copyright (c) 2020 Anthony Sottile <asottile@umich.edu>
-# Copyright (c) 2021 Marc Mueller <30130371+cdce8p@users.noreply.github.com>
-
# Licensed under the GPL: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
# For details: https://github.com/PyCQA/pylint/blob/master/COPYING
-"""Generic Setup script, takes package info from __pkginfo__.py file."""
-
-# pylint: disable=import-outside-toplevel,arguments-differ,ungrouped-imports,exec-used
-
-import os
-import sys
-from distutils.command.build_py import build_py
-from os.path import exists, isdir, join
+from pathlib import Path
from typing import Any, Dict
-try:
- from setuptools import setup
- from setuptools.command import easy_install as easy_install_lib
-
- USE_SETUPTOOLS = 1
-except ImportError:
- from distutils.core import setup
-
- USE_SETUPTOOLS = 0
- easy_install_lib = None
-
+import setuptools
-__docformat__ = "restructuredtext en"
-base_dir = os.path.dirname(__file__)
+HERE = Path(__file__).parent
__pkginfo__: Dict[str, Any] = {}
-with open(os.path.join(base_dir, "pylint", "__pkginfo__.py")) as pkginfo_fp:
- exec(pkginfo_fp.read(), __pkginfo__)
-scripts = __pkginfo__.get("scripts", [])
-data_files = __pkginfo__.get("data_files", None)
-ext_modules = __pkginfo__.get("ext_modules", None)
-install_requires = __pkginfo__.get("install_requires", None)
-dependency_links = __pkginfo__.get("dependency_links", [])
-extras_require = __pkginfo__.get("extras_require", {})
-project_urls = __pkginfo__.get("project_urls", {})
-
-readme_path = join(base_dir, "README.rst")
-if exists(readme_path):
- with open(readme_path, encoding="UTF-8") as stream:
- long_description = stream.read()
-else:
- long_description = ""
-
-
-needs_pytest = {"pytest", "test", "ptr"}.intersection(sys.argv)
-pytest_runner = ["pytest-runner"] if needs_pytest else []
-
-
-def ensure_scripts(linux_scripts):
- """Creates the proper script names required for each platform
- (taken from 4Suite)
- """
- from distutils import util
-
- if util.get_platform()[:3] == "win":
- return linux_scripts + [script + ".bat" for script in linux_scripts]
- return linux_scripts
-
-
-def get_packages(directory, prefix):
- """return a list of subpackages for the given directory"""
- result = []
- for package in os.listdir(directory):
- absfile = join(directory, package)
- if isdir(absfile):
- if exists(join(absfile, "__init__.py")):
- if prefix:
- result.append(f"{prefix}.{package}")
- else:
- result.append(package)
- result += get_packages(absfile, result[-1])
- return result
-
-
-def _filter_tests(files):
- testdir = join("pylint", "test")
- return [f for f in files if testdir not in f]
-
-
-if easy_install_lib:
-
- class easy_install(easy_install_lib.easy_install):
- # override this since pip/easy_install attempt to byte compile
- # test data files, some of them being syntactically wrong by design,
- # and this scares the end-user
- def byte_compile(self, files):
- files = _filter_tests(files)
- easy_install_lib.easy_install.byte_compile(self, files)
-
-
-def install(**kwargs):
- """setup entry point"""
- if USE_SETUPTOOLS:
- if "--force-manifest" in sys.argv:
- sys.argv.remove("--force-manifest")
- packages = ["pylint"] + get_packages(join(base_dir, "pylint"), "pylint")
- if USE_SETUPTOOLS:
- if install_requires:
- kwargs["install_requires"] = install_requires
- kwargs["dependency_links"] = dependency_links
- kwargs["entry_points"] = {
- "console_scripts": [
- "pylint = pylint:run_pylint",
- "epylint = pylint:run_epylint",
- "pyreverse = pylint:run_pyreverse",
- "symilar = pylint:run_symilar",
- ]
- }
- kwargs["packages"] = packages
- cmdclass = {"build_py": build_py}
- if easy_install_lib:
- cmdclass["easy_install"] = easy_install
- return setup(
- name="pylint",
- version=__pkginfo__["version"],
- license=__pkginfo__["license"],
- description=__pkginfo__["description"],
- long_description=long_description,
- author=__pkginfo__["author"],
- author_email=__pkginfo__["author_email"],
- url=__pkginfo__["web"],
- scripts=ensure_scripts(scripts),
- classifiers=__pkginfo__["classifiers"],
- data_files=data_files,
- ext_modules=ext_modules,
- cmdclass=cmdclass,
- extras_require=extras_require,
- test_suite="test",
- python_requires="~=3.6",
- setup_requires=pytest_runner,
- tests_require=["pytest", "pytest-benchmark"],
- project_urls=project_urls,
- **kwargs,
- )
-
-
-if __name__ == "__main__":
- install()
+with open(HERE / "pylint/__pkginfo__.py", encoding="UTF-8") as f:
+ exec(f.read(), __pkginfo__) # pylint: disable=exec-used
+with open(HERE / "README.rst", encoding="UTF-8") as f:
+ long_description = f.read()
+
+setuptools.setup(
+ name="pylint",
+ version=__pkginfo__["version"],
+ license=__pkginfo__["license"],
+ description=__pkginfo__["description"],
+ long_description=long_description,
+ author=__pkginfo__["author"],
+ author_email=__pkginfo__["author_email"],
+ url=__pkginfo__["web"],
+ project_urls=__pkginfo__.get("project_urls", {}),
+ classifiers=__pkginfo__["classifiers"],
+ data_files=__pkginfo__.get("data_files", None),
+ ext_modules=__pkginfo__.get("ext_modules", None),
+ python_requires="~=3.6",
+ setup_requires=[],
+ tests_require=["pytest", "pytest-benchmark"],
+ install_requires=__pkginfo__.get("install_requires", None),
+ extras_require={
+ ':sys_platform=="win32"': ["colorama"],
+ "docs": ["sphinx==3.5.1", "python-docs-theme==2020.12"],
+ },
+ entry_points={
+ "console_scripts": [
+ "pylint = pylint:run_pylint",
+ "epylint = pylint:run_epylint",
+ "pyreverse = pylint:run_pyreverse",
+ "symilar = pylint:run_symilar",
+ ]
+ },
+ packages=setuptools.find_packages(),
+)