Build(setup.py): Use `importlib` instead of deprecated `imp` for Python 3.4+
[cookiecutter.git] / project_template / setup.py
index 21d21b6bda2001de790025b9f1cdce9ea19f4294..8297efa6656c7c47a32c9c8d2f7051cf30a50c83 100755 (executable)
@@ -1,48 +1,70 @@
 #!/usr/bin/env python
 
 #!/usr/bin/env python
 
-from imp import load_source
 from os.path import abspath, dirname, join
 from os.path import abspath, dirname, join
+from setuptools import setup
+import sys
 
 
-try:
-    from setuptools import setup
-    is_setuptools = True
-except ImportError:
-    from distutils.core import setup
-    is_setuptools = False
+if sys.version_info[:2] == (2, 7):
+    from imp import load_source
+
+elif sys.version_info >= (3, 4):
+    from importlib.machinery import SourceFileLoader
+    import types
+
+    def load_source(fullname, path):
+        loader = SourceFileLoader(fullname, path)
+        loaded = types.ModuleType(loader.name)
+        loader.exec_module(loaded)
+        return loaded
+
+else:
+    raise ImportError("{project} requires Python 2.7 or 3.4+")
 
 versionpath = join(abspath(dirname(__file__)), '{project}', '__version__.py')
 
 versionpath = join(abspath(dirname(__file__)), '{project}', '__version__.py')
-load_source('{project}_version', versionpath)
-# Ignore: E402 module level import not at top of file
-from {project}_version import __version__  # noqa
+{project}_version = load_source('{project}_version', versionpath)
 
 
-setup(name='{project}',
-      version=__version__,
-      description='Broytman {project}',
-      long_description=open('README.rst', 'rU').read(),
-      author='Oleg Broytman',
-      author_email='phd@phdru.name',
-      url='http://phdru.name/Software/Python/{project}',
-      license='GPL',
-      platforms=['any'],
-      keywords=[''],
-      classifiers=[
-          'Development Status :: 1 - Planning',
-          'Environment :: Console',
-          'Environment :: Web Environment',
-          'Intended Audience :: End Users/Desktop',
-          'License :: OSI Approved :: GNU General Public License (GPL)',
-          'Operating System :: OS Independent',
-          'Programming Language :: Python :: 2',
-          'Programming Language :: Python :: 2.6',
-          'Programming Language :: Python :: 2.7',
-          'Programming Language :: Python :: 3',
-          'Programming Language :: Python :: 3.3',
-          'Programming Language :: Python :: 3.4',
-          'Programming Language :: Python :: 3.5',
-          'Programming Language :: Python :: 3.6',
-      ],
-      packages=['{project}'],
-      package_data={'{project}': []},
-      scripts=[],
-      requires=[],
-      )
+setup(
+    name='{project}',
+    version={project}_version.__version__,
+    description='Broytman {project}',
+    long_description=open('README.rst', 'rU').read(),
+    long_description_content_type="text/x-rst",
+    author='Oleg Broytman',
+    author_email='phd@phdru.name',
+    url='https://phdru.name/Software/Python/{project}',
+    download_url='https://phdru.name/Software/Python/{project}',
+    project_urls={
+        'Homepage': 'https://phdru.name/Software/Python/{project}',
+        'Documentation':
+            'https://phdru.name/Software/Python/{project}/docs/',
+        'Russian docs':
+            'https://phdru.name/Software/Python/{project}/docs/ru/',
+        'Download': 'https://phdru.name/Software/Python/{project}',
+        'Git repo': 'https://git.phdru.name/{project}.git/',
+        'Github repo': 'https://github.com/phdru/{project}',
+        'Issue tracker': 'https://github.com/phdru/{project}/issues',
+    },
+    license='GPL',
+    keywords=[''],
+    platforms='Any',
+    classifiers=[
+        'Development Status :: 1 - Planning',
+        'Environment :: Console',
+        'Environment :: Web Environment',
+        'Intended Audience :: End Users/Desktop',
+        'License :: OSI Approved :: GNU General Public License (GPL)',
+        'Operating System :: OS Independent',
+        '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',
+    ],
+    packages=['{project}'],
+    package_data={'{project}': []},
+    scripts=[],
+    python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*',
+    requires=[],
+)