We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
typing should not be a dependency for python>=3.5
https://github.com/ipython/ipython/commit/3ff1be2ea8ef180a6f17a6a03a3f8452303b9abe added `typing` as an `install_requires`.  This package is builtin for python>=3.5, so it should be protected by an environment marker (just like `pathlib2`) in setup.py.

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `setup.py`
Content:
```
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 """Setup script for IPython.
4 
5 Under Posix environments it works like a typical setup.py script.
6 Under Windows, the command sdist is not supported, since IPython
7 requires utilities which are not available under Windows."""
8 
9 #-----------------------------------------------------------------------------
10 #  Copyright (c) 2008-2011, IPython Development Team.
11 #  Copyright (c) 2001-2007, Fernando Perez <fernando.perez@colorado.edu>
12 #  Copyright (c) 2001, Janko Hauser <jhauser@zscout.de>
13 #  Copyright (c) 2001, Nathaniel Gray <n8gray@caltech.edu>
14 #
15 #  Distributed under the terms of the Modified BSD License.
16 #
17 #  The full license is in the file COPYING.rst, distributed with this software.
18 #-----------------------------------------------------------------------------
19 
20 #-----------------------------------------------------------------------------
21 # Minimal Python version sanity check
22 #-----------------------------------------------------------------------------
23 from __future__ import print_function
24 
25 import sys
26 
27 # This check is also made in IPython/__init__, don't forget to update both when
28 # changing Python version requirements.
29 if sys.version_info < (3,3):
30     error = """
31 IPython 6.0+ does not support Python 2.6, 2.7, 3.0, 3.1, or 3.2.
32 When using Python 2.7, please install IPython 5.x LTS Long Term Support version.
33 Beginning with IPython 6.0, Python 3.3 and above is required.
34 
35 See IPython `README.rst` file for more information:
36 
37     https://github.com/ipython/ipython/blob/master/README.rst
38 
39 Python {} detected.
40 
41 """.format(sys.version_info)
42 
43     print(error, file=sys.stderr)
44     sys.exit(1)
45 
46 # At least we're on the python version we need, move on.
47 
48 #-------------------------------------------------------------------------------
49 # Imports
50 #-------------------------------------------------------------------------------
51 
52 # Stdlib imports
53 import os
54 
55 from glob import glob
56 
57 # BEFORE importing distutils, remove MANIFEST. distutils doesn't properly
58 # update it when the contents of directories change.
59 if os.path.exists('MANIFEST'): os.remove('MANIFEST')
60 
61 from distutils.core import setup
62 
63 # Our own imports
64 from setupbase import target_update
65 
66 from setupbase import (
67     setup_args,
68     find_packages,
69     find_package_data,
70     check_package_data_first,
71     find_entry_points,
72     build_scripts_entrypt,
73     find_data_files,
74     git_prebuild,
75     install_symlinked,
76     install_lib_symlink,
77     install_scripts_for_symlink,
78     unsymlink,
79 )
80 
81 isfile = os.path.isfile
82 pjoin = os.path.join
83 
84 #-------------------------------------------------------------------------------
85 # Handle OS specific things
86 #-------------------------------------------------------------------------------
87 
88 if os.name in ('nt','dos'):
89     os_name = 'windows'
90 else:
91     os_name = os.name
92 
93 # Under Windows, 'sdist' has not been supported.  Now that the docs build with
94 # Sphinx it might work, but let's not turn it on until someone confirms that it
95 # actually works.
96 if os_name == 'windows' and 'sdist' in sys.argv:
97     print('The sdist command is not available under Windows.  Exiting.')
98     sys.exit(1)
99 
100 
101 #-------------------------------------------------------------------------------
102 # Things related to the IPython documentation
103 #-------------------------------------------------------------------------------
104 
105 # update the manuals when building a source dist
106 if len(sys.argv) >= 2 and sys.argv[1] in ('sdist','bdist_rpm'):
107 
108     # List of things to be updated. Each entry is a triplet of args for
109     # target_update()
110     to_update = [
111                  ('docs/man/ipython.1.gz',
112                   ['docs/man/ipython.1'],
113                   'cd docs/man && gzip -9c ipython.1 > ipython.1.gz'),
114                  ]
115 
116 
117     [ target_update(*t) for t in to_update ]
118 
119 #---------------------------------------------------------------------------
120 # Find all the packages, package data, and data_files
121 #---------------------------------------------------------------------------
122 
123 packages = find_packages()
124 package_data = find_package_data()
125 
126 data_files = find_data_files()
127 
128 setup_args['packages'] = packages
129 setup_args['package_data'] = package_data
130 setup_args['data_files'] = data_files
131 
132 #---------------------------------------------------------------------------
133 # custom distutils commands
134 #---------------------------------------------------------------------------
135 # imports here, so they are after setuptools import if there was one
136 from distutils.command.sdist import sdist
137 from distutils.command.upload import upload
138 
139 class UploadWindowsInstallers(upload):
140 
141     description = "Upload Windows installers to PyPI (only used from tools/release_windows.py)"
142     user_options = upload.user_options + [
143         ('files=', 'f', 'exe file (or glob) to upload')
144     ]
145     def initialize_options(self):
146         upload.initialize_options(self)
147         meta = self.distribution.metadata
148         base = '{name}-{version}'.format(
149             name=meta.get_name(),
150             version=meta.get_version()
151         )
152         self.files = os.path.join('dist', '%s.*.exe' % base)
153 
154     def run(self):
155         for dist_file in glob(self.files):
156             self.upload_file('bdist_wininst', 'any', dist_file)
157 
158 setup_args['cmdclass'] = {
159     'build_py': \
160             check_package_data_first(git_prebuild('IPython')),
161     'sdist' : git_prebuild('IPython', sdist),
162     'upload_wininst' : UploadWindowsInstallers,
163     'symlink': install_symlinked,
164     'install_lib_symlink': install_lib_symlink,
165     'install_scripts_sym': install_scripts_for_symlink,
166     'unsymlink': unsymlink,
167 }
168 
169 
170 #---------------------------------------------------------------------------
171 # Handle scripts, dependencies, and setuptools specific things
172 #---------------------------------------------------------------------------
173 
174 # For some commands, use setuptools.  Note that we do NOT list install here!
175 # If you want a setuptools-enhanced install, just run 'setupegg.py install'
176 needs_setuptools = set(('develop', 'release', 'bdist_egg', 'bdist_rpm',
177            'bdist', 'bdist_dumb', 'bdist_wininst', 'bdist_wheel',
178            'egg_info', 'easy_install', 'upload', 'install_egg_info',
179             ))
180 
181 if len(needs_setuptools.intersection(sys.argv)) > 0:
182     import setuptools
183 
184 # This dict is used for passing extra arguments that are setuptools
185 # specific to setup
186 setuptools_extra_args = {}
187 
188 # setuptools requirements
189 
190 extras_require = dict(
191     parallel = ['ipyparallel'],
192     qtconsole = ['qtconsole'],
193     doc = ['Sphinx>=1.3'],
194     test = ['nose>=0.10.1', 'requests', 'testpath', 'pygments', 'nbformat', 'ipykernel'],
195     terminal = [],
196     kernel = ['ipykernel'],
197     nbformat = ['nbformat'],
198     notebook = ['notebook', 'ipywidgets'],
199     nbconvert = ['nbconvert'],
200 )
201 
202 install_requires = [
203     'setuptools>=18.5',
204     'jedi>=0.10',
205     'typing',
206     'decorator',
207     'pickleshare',
208     'simplegeneric>0.8',
209     'traitlets>=4.2',
210     'prompt_toolkit>=1.0.4,<2.0.0',
211     'pygments',
212 ]
213 
214 # Platform-specific dependencies:
215 # This is the correct way to specify these,
216 # but requires pip >= 6. pip < 6 ignores these.
217 
218 extras_require.update({
219     'test:python_version >= "3.4"': ['numpy'],
220     ':python_version == "3.3"': ['pathlib2'],
221     ':sys_platform != "win32"': ['pexpect'],
222     ':sys_platform == "darwin"': ['appnope'],
223     ':sys_platform == "win32"': ['colorama'],
224     ':sys_platform == "win32" and python_version < "3.6"': ['win_unicode_console>=0.5'],
225 })
226 # FIXME: re-specify above platform dependencies for pip < 6
227 # These would result in non-portable bdists.
228 if not any(arg.startswith('bdist') for arg in sys.argv):
229     if sys.platform == 'darwin':
230         install_requires.extend(['appnope'])
231 
232     if not sys.platform.startswith('win'):
233         install_requires.append('pexpect')
234 
235     # workaround pypa/setuptools#147, where setuptools misspells
236     # platform_python_implementation as python_implementation
237     if 'setuptools' in sys.modules:
238         for key in list(extras_require):
239             if 'platform_python_implementation' in key:
240                 new_key = key.replace('platform_python_implementation', 'python_implementation')
241                 extras_require[new_key] = extras_require.pop(key)
242 
243 everything = set()
244 for key, deps in extras_require.items():
245     if ':' not in key:
246         everything.update(deps)
247 extras_require['all'] = everything
248 
249 if 'setuptools' in sys.modules:
250     setuptools_extra_args['python_requires'] = '>=3.3'
251     setuptools_extra_args['zip_safe'] = False
252     setuptools_extra_args['entry_points'] = {
253         'console_scripts': find_entry_points(),
254         'pygments.lexers': [
255             'ipythonconsole = IPython.lib.lexers:IPythonConsoleLexer',
256             'ipython = IPython.lib.lexers:IPythonLexer',
257             'ipython3 = IPython.lib.lexers:IPython3Lexer',
258         ],
259     }
260     setup_args['extras_require'] = extras_require
261     requires = setup_args['install_requires'] = install_requires
262 
263     # Script to be run by the windows binary installer after the default setup
264     # routine, to add shortcuts and similar windows-only things.  Windows
265     # post-install scripts MUST reside in the scripts/ dir, otherwise distutils
266     # doesn't find them.
267     if 'bdist_wininst' in sys.argv:
268         if len(sys.argv) > 2 and \
269                ('sdist' in sys.argv or 'bdist_rpm' in sys.argv):
270             print("ERROR: bdist_wininst must be run alone. Exiting.", file=sys.stderr)
271             sys.exit(1)
272         setup_args['data_files'].append(
273             ['Scripts', ('scripts/ipython.ico', 'scripts/ipython_nb.ico')])
274         setup_args['scripts'] = [pjoin('scripts','ipython_win_post_install.py')]
275         setup_args['options'] = {"bdist_wininst":
276                                  {"install_script":
277                                   "ipython_win_post_install.py"}}
278 
279 else:
280     # scripts has to be a non-empty list, or install_scripts isn't called
281     setup_args['scripts'] = [e.split('=')[0].strip() for e in find_entry_points()]
282 
283     setup_args['cmdclass']['build_scripts'] = build_scripts_entrypt
284 
285 #---------------------------------------------------------------------------
286 # Do the actual setup now
287 #---------------------------------------------------------------------------
288 
289 setup_args.update(setuptools_extra_args)
290 
291 
292 
293 def main():
294     setup(**setup_args)
295 
296 if __name__ == '__main__':
297     main()
298
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -202,7 +202,6 @@
 install_requires = [
     'setuptools>=18.5',
     'jedi>=0.10',
-    'typing',
     'decorator',
     'pickleshare',
     'simplegeneric>0.8',
@@ -218,6 +217,7 @@
 extras_require.update({
     'test:python_version >= "3.4"': ['numpy'],
     ':python_version == "3.3"': ['pathlib2'],
+    ':python_version <= "3.4"': ['typing'],
     ':sys_platform != "win32"': ['pexpect'],
     ':sys_platform == "darwin"': ['appnope'],
     ':sys_platform == "win32"': ['colorama'],

{"golden_diff": "diff --git a/setup.py b/setup.py\n--- a/setup.py\n+++ b/setup.py\n@@ -202,7 +202,6 @@\n install_requires = [\n     'setuptools>=18.5',\n     'jedi>=0.10',\n-    'typing',\n     'decorator',\n     'pickleshare',\n     'simplegeneric>0.8',\n@@ -218,6 +217,7 @@\n extras_require.update({\n     'test:python_version >= \"3.4\"': ['numpy'],\n     ':python_version == \"3.3\"': ['pathlib2'],\n+    ':python_version <= \"3.4\"': ['typing'],\n     ':sys_platform != \"win32\"': ['pexpect'],\n     ':sys_platform == \"darwin\"': ['appnope'],\n     ':sys_platform == \"win32\"': ['colorama'],\n", "issue": "typing should not be a dependency for python>=3.5\nhttps://github.com/ipython/ipython/commit/3ff1be2ea8ef180a6f17a6a03a3f8452303b9abe added `typing` as an `install_requires`.  This package is builtin for python>=3.5, so it should be protected by an environment marker (just like `pathlib2`) in setup.py.\n", "before_files": [{"content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\"\"\"Setup script for IPython.\n\nUnder Posix environments it works like a typical setup.py script.\nUnder Windows, the command sdist is not supported, since IPython\nrequires utilities which are not available under Windows.\"\"\"\n\n#-----------------------------------------------------------------------------\n#  Copyright (c) 2008-2011, IPython Development Team.\n#  Copyright (c) 2001-2007, Fernando Perez <fernando.perez@colorado.edu>\n#  Copyright (c) 2001, Janko Hauser <jhauser@zscout.de>\n#  Copyright (c) 2001, Nathaniel Gray <n8gray@caltech.edu>\n#\n#  Distributed under the terms of the Modified BSD License.\n#\n#  The full license is in the file COPYING.rst, distributed with this software.\n#-----------------------------------------------------------------------------\n\n#-----------------------------------------------------------------------------\n# Minimal Python version sanity check\n#-----------------------------------------------------------------------------\nfrom __future__ import print_function\n\nimport sys\n\n# This check is also made in IPython/__init__, don't forget to update both when\n# changing Python version requirements.\nif sys.version_info < (3,3):\n    error = \"\"\"\nIPython 6.0+ does not support Python 2.6, 2.7, 3.0, 3.1, or 3.2.\nWhen using Python 2.7, please install IPython 5.x LTS Long Term Support version.\nBeginning with IPython 6.0, Python 3.3 and above is required.\n\nSee IPython `README.rst` file for more information:\n\n    https://github.com/ipython/ipython/blob/master/README.rst\n\nPython {} detected.\n\n\"\"\".format(sys.version_info)\n\n    print(error, file=sys.stderr)\n    sys.exit(1)\n\n# At least we're on the python version we need, move on.\n\n#-------------------------------------------------------------------------------\n# Imports\n#-------------------------------------------------------------------------------\n\n# Stdlib imports\nimport os\n\nfrom glob import glob\n\n# BEFORE importing distutils, remove MANIFEST. distutils doesn't properly\n# update it when the contents of directories change.\nif os.path.exists('MANIFEST'): os.remove('MANIFEST')\n\nfrom distutils.core import setup\n\n# Our own imports\nfrom setupbase import target_update\n\nfrom setupbase import (\n    setup_args,\n    find_packages,\n    find_package_data,\n    check_package_data_first,\n    find_entry_points,\n    build_scripts_entrypt,\n    find_data_files,\n    git_prebuild,\n    install_symlinked,\n    install_lib_symlink,\n    install_scripts_for_symlink,\n    unsymlink,\n)\n\nisfile = os.path.isfile\npjoin = os.path.join\n\n#-------------------------------------------------------------------------------\n# Handle OS specific things\n#-------------------------------------------------------------------------------\n\nif os.name in ('nt','dos'):\n    os_name = 'windows'\nelse:\n    os_name = os.name\n\n# Under Windows, 'sdist' has not been supported.  Now that the docs build with\n# Sphinx it might work, but let's not turn it on until someone confirms that it\n# actually works.\nif os_name == 'windows' and 'sdist' in sys.argv:\n    print('The sdist command is not available under Windows.  Exiting.')\n    sys.exit(1)\n\n\n#-------------------------------------------------------------------------------\n# Things related to the IPython documentation\n#-------------------------------------------------------------------------------\n\n# update the manuals when building a source dist\nif len(sys.argv) >= 2 and sys.argv[1] in ('sdist','bdist_rpm'):\n\n    # List of things to be updated. Each entry is a triplet of args for\n    # target_update()\n    to_update = [\n                 ('docs/man/ipython.1.gz',\n                  ['docs/man/ipython.1'],\n                  'cd docs/man && gzip -9c ipython.1 > ipython.1.gz'),\n                 ]\n\n\n    [ target_update(*t) for t in to_update ]\n\n#---------------------------------------------------------------------------\n# Find all the packages, package data, and data_files\n#---------------------------------------------------------------------------\n\npackages = find_packages()\npackage_data = find_package_data()\n\ndata_files = find_data_files()\n\nsetup_args['packages'] = packages\nsetup_args['package_data'] = package_data\nsetup_args['data_files'] = data_files\n\n#---------------------------------------------------------------------------\n# custom distutils commands\n#---------------------------------------------------------------------------\n# imports here, so they are after setuptools import if there was one\nfrom distutils.command.sdist import sdist\nfrom distutils.command.upload import upload\n\nclass UploadWindowsInstallers(upload):\n\n    description = \"Upload Windows installers to PyPI (only used from tools/release_windows.py)\"\n    user_options = upload.user_options + [\n        ('files=', 'f', 'exe file (or glob) to upload')\n    ]\n    def initialize_options(self):\n        upload.initialize_options(self)\n        meta = self.distribution.metadata\n        base = '{name}-{version}'.format(\n            name=meta.get_name(),\n            version=meta.get_version()\n        )\n        self.files = os.path.join('dist', '%s.*.exe' % base)\n\n    def run(self):\n        for dist_file in glob(self.files):\n            self.upload_file('bdist_wininst', 'any', dist_file)\n\nsetup_args['cmdclass'] = {\n    'build_py': \\\n            check_package_data_first(git_prebuild('IPython')),\n    'sdist' : git_prebuild('IPython', sdist),\n    'upload_wininst' : UploadWindowsInstallers,\n    'symlink': install_symlinked,\n    'install_lib_symlink': install_lib_symlink,\n    'install_scripts_sym': install_scripts_for_symlink,\n    'unsymlink': unsymlink,\n}\n\n\n#---------------------------------------------------------------------------\n# Handle scripts, dependencies, and setuptools specific things\n#---------------------------------------------------------------------------\n\n# For some commands, use setuptools.  Note that we do NOT list install here!\n# If you want a setuptools-enhanced install, just run 'setupegg.py install'\nneeds_setuptools = set(('develop', 'release', 'bdist_egg', 'bdist_rpm',\n           'bdist', 'bdist_dumb', 'bdist_wininst', 'bdist_wheel',\n           'egg_info', 'easy_install', 'upload', 'install_egg_info',\n            ))\n\nif len(needs_setuptools.intersection(sys.argv)) > 0:\n    import setuptools\n\n# This dict is used for passing extra arguments that are setuptools\n# specific to setup\nsetuptools_extra_args = {}\n\n# setuptools requirements\n\nextras_require = dict(\n    parallel = ['ipyparallel'],\n    qtconsole = ['qtconsole'],\n    doc = ['Sphinx>=1.3'],\n    test = ['nose>=0.10.1', 'requests', 'testpath', 'pygments', 'nbformat', 'ipykernel'],\n    terminal = [],\n    kernel = ['ipykernel'],\n    nbformat = ['nbformat'],\n    notebook = ['notebook', 'ipywidgets'],\n    nbconvert = ['nbconvert'],\n)\n\ninstall_requires = [\n    'setuptools>=18.5',\n    'jedi>=0.10',\n    'typing',\n    'decorator',\n    'pickleshare',\n    'simplegeneric>0.8',\n    'traitlets>=4.2',\n    'prompt_toolkit>=1.0.4,<2.0.0',\n    'pygments',\n]\n\n# Platform-specific dependencies:\n# This is the correct way to specify these,\n# but requires pip >= 6. pip < 6 ignores these.\n\nextras_require.update({\n    'test:python_version >= \"3.4\"': ['numpy'],\n    ':python_version == \"3.3\"': ['pathlib2'],\n    ':sys_platform != \"win32\"': ['pexpect'],\n    ':sys_platform == \"darwin\"': ['appnope'],\n    ':sys_platform == \"win32\"': ['colorama'],\n    ':sys_platform == \"win32\" and python_version < \"3.6\"': ['win_unicode_console>=0.5'],\n})\n# FIXME: re-specify above platform dependencies for pip < 6\n# These would result in non-portable bdists.\nif not any(arg.startswith('bdist') for arg in sys.argv):\n    if sys.platform == 'darwin':\n        install_requires.extend(['appnope'])\n\n    if not sys.platform.startswith('win'):\n        install_requires.append('pexpect')\n\n    # workaround pypa/setuptools#147, where setuptools misspells\n    # platform_python_implementation as python_implementation\n    if 'setuptools' in sys.modules:\n        for key in list(extras_require):\n            if 'platform_python_implementation' in key:\n                new_key = key.replace('platform_python_implementation', 'python_implementation')\n                extras_require[new_key] = extras_require.pop(key)\n\neverything = set()\nfor key, deps in extras_require.items():\n    if ':' not in key:\n        everything.update(deps)\nextras_require['all'] = everything\n\nif 'setuptools' in sys.modules:\n    setuptools_extra_args['python_requires'] = '>=3.3'\n    setuptools_extra_args['zip_safe'] = False\n    setuptools_extra_args['entry_points'] = {\n        'console_scripts': find_entry_points(),\n        'pygments.lexers': [\n            'ipythonconsole = IPython.lib.lexers:IPythonConsoleLexer',\n            'ipython = IPython.lib.lexers:IPythonLexer',\n            'ipython3 = IPython.lib.lexers:IPython3Lexer',\n        ],\n    }\n    setup_args['extras_require'] = extras_require\n    requires = setup_args['install_requires'] = install_requires\n\n    # Script to be run by the windows binary installer after the default setup\n    # routine, to add shortcuts and similar windows-only things.  Windows\n    # post-install scripts MUST reside in the scripts/ dir, otherwise distutils\n    # doesn't find them.\n    if 'bdist_wininst' in sys.argv:\n        if len(sys.argv) > 2 and \\\n               ('sdist' in sys.argv or 'bdist_rpm' in sys.argv):\n            print(\"ERROR: bdist_wininst must be run alone. Exiting.\", file=sys.stderr)\n            sys.exit(1)\n        setup_args['data_files'].append(\n            ['Scripts', ('scripts/ipython.ico', 'scripts/ipython_nb.ico')])\n        setup_args['scripts'] = [pjoin('scripts','ipython_win_post_install.py')]\n        setup_args['options'] = {\"bdist_wininst\":\n                                 {\"install_script\":\n                                  \"ipython_win_post_install.py\"}}\n\nelse:\n    # scripts has to be a non-empty list, or install_scripts isn't called\n    setup_args['scripts'] = [e.split('=')[0].strip() for e in find_entry_points()]\n\n    setup_args['cmdclass']['build_scripts'] = build_scripts_entrypt\n\n#---------------------------------------------------------------------------\n# Do the actual setup now\n#---------------------------------------------------------------------------\n\nsetup_args.update(setuptools_extra_args)\n\n\n\ndef main():\n    setup(**setup_args)\n\nif __name__ == '__main__':\n    main()\n", "path": "setup.py"}], "after_files": [{"content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\"\"\"Setup script for IPython.\n\nUnder Posix environments it works like a typical setup.py script.\nUnder Windows, the command sdist is not supported, since IPython\nrequires utilities which are not available under Windows.\"\"\"\n\n#-----------------------------------------------------------------------------\n#  Copyright (c) 2008-2011, IPython Development Team.\n#  Copyright (c) 2001-2007, Fernando Perez <fernando.perez@colorado.edu>\n#  Copyright (c) 2001, Janko Hauser <jhauser@zscout.de>\n#  Copyright (c) 2001, Nathaniel Gray <n8gray@caltech.edu>\n#\n#  Distributed under the terms of the Modified BSD License.\n#\n#  The full license is in the file COPYING.rst, distributed with this software.\n#-----------------------------------------------------------------------------\n\n#-----------------------------------------------------------------------------\n# Minimal Python version sanity check\n#-----------------------------------------------------------------------------\nfrom __future__ import print_function\n\nimport sys\n\n# This check is also made in IPython/__init__, don't forget to update both when\n# changing Python version requirements.\nif sys.version_info < (3,3):\n    error = \"\"\"\nIPython 6.0+ does not support Python 2.6, 2.7, 3.0, 3.1, or 3.2.\nWhen using Python 2.7, please install IPython 5.x LTS Long Term Support version.\nBeginning with IPython 6.0, Python 3.3 and above is required.\n\nSee IPython `README.rst` file for more information:\n\n    https://github.com/ipython/ipython/blob/master/README.rst\n\nPython {} detected.\n\n\"\"\".format(sys.version_info)\n\n    print(error, file=sys.stderr)\n    sys.exit(1)\n\n# At least we're on the python version we need, move on.\n\n#-------------------------------------------------------------------------------\n# Imports\n#-------------------------------------------------------------------------------\n\n# Stdlib imports\nimport os\n\nfrom glob import glob\n\n# BEFORE importing distutils, remove MANIFEST. distutils doesn't properly\n# update it when the contents of directories change.\nif os.path.exists('MANIFEST'): os.remove('MANIFEST')\n\nfrom distutils.core import setup\n\n# Our own imports\nfrom setupbase import target_update\n\nfrom setupbase import (\n    setup_args,\n    find_packages,\n    find_package_data,\n    check_package_data_first,\n    find_entry_points,\n    build_scripts_entrypt,\n    find_data_files,\n    git_prebuild,\n    install_symlinked,\n    install_lib_symlink,\n    install_scripts_for_symlink,\n    unsymlink,\n)\n\nisfile = os.path.isfile\npjoin = os.path.join\n\n#-------------------------------------------------------------------------------\n# Handle OS specific things\n#-------------------------------------------------------------------------------\n\nif os.name in ('nt','dos'):\n    os_name = 'windows'\nelse:\n    os_name = os.name\n\n# Under Windows, 'sdist' has not been supported.  Now that the docs build with\n# Sphinx it might work, but let's not turn it on until someone confirms that it\n# actually works.\nif os_name == 'windows' and 'sdist' in sys.argv:\n    print('The sdist command is not available under Windows.  Exiting.')\n    sys.exit(1)\n\n\n#-------------------------------------------------------------------------------\n# Things related to the IPython documentation\n#-------------------------------------------------------------------------------\n\n# update the manuals when building a source dist\nif len(sys.argv) >= 2 and sys.argv[1] in ('sdist','bdist_rpm'):\n\n    # List of things to be updated. Each entry is a triplet of args for\n    # target_update()\n    to_update = [\n                 ('docs/man/ipython.1.gz',\n                  ['docs/man/ipython.1'],\n                  'cd docs/man && gzip -9c ipython.1 > ipython.1.gz'),\n                 ]\n\n\n    [ target_update(*t) for t in to_update ]\n\n#---------------------------------------------------------------------------\n# Find all the packages, package data, and data_files\n#---------------------------------------------------------------------------\n\npackages = find_packages()\npackage_data = find_package_data()\n\ndata_files = find_data_files()\n\nsetup_args['packages'] = packages\nsetup_args['package_data'] = package_data\nsetup_args['data_files'] = data_files\n\n#---------------------------------------------------------------------------\n# custom distutils commands\n#---------------------------------------------------------------------------\n# imports here, so they are after setuptools import if there was one\nfrom distutils.command.sdist import sdist\nfrom distutils.command.upload import upload\n\nclass UploadWindowsInstallers(upload):\n\n    description = \"Upload Windows installers to PyPI (only used from tools/release_windows.py)\"\n    user_options = upload.user_options + [\n        ('files=', 'f', 'exe file (or glob) to upload')\n    ]\n    def initialize_options(self):\n        upload.initialize_options(self)\n        meta = self.distribution.metadata\n        base = '{name}-{version}'.format(\n            name=meta.get_name(),\n            version=meta.get_version()\n        )\n        self.files = os.path.join('dist', '%s.*.exe' % base)\n\n    def run(self):\n        for dist_file in glob(self.files):\n            self.upload_file('bdist_wininst', 'any', dist_file)\n\nsetup_args['cmdclass'] = {\n    'build_py': \\\n            check_package_data_first(git_prebuild('IPython')),\n    'sdist' : git_prebuild('IPython', sdist),\n    'upload_wininst' : UploadWindowsInstallers,\n    'symlink': install_symlinked,\n    'install_lib_symlink': install_lib_symlink,\n    'install_scripts_sym': install_scripts_for_symlink,\n    'unsymlink': unsymlink,\n}\n\n\n#---------------------------------------------------------------------------\n# Handle scripts, dependencies, and setuptools specific things\n#---------------------------------------------------------------------------\n\n# For some commands, use setuptools.  Note that we do NOT list install here!\n# If you want a setuptools-enhanced install, just run 'setupegg.py install'\nneeds_setuptools = set(('develop', 'release', 'bdist_egg', 'bdist_rpm',\n           'bdist', 'bdist_dumb', 'bdist_wininst', 'bdist_wheel',\n           'egg_info', 'easy_install', 'upload', 'install_egg_info',\n            ))\n\nif len(needs_setuptools.intersection(sys.argv)) > 0:\n    import setuptools\n\n# This dict is used for passing extra arguments that are setuptools\n# specific to setup\nsetuptools_extra_args = {}\n\n# setuptools requirements\n\nextras_require = dict(\n    parallel = ['ipyparallel'],\n    qtconsole = ['qtconsole'],\n    doc = ['Sphinx>=1.3'],\n    test = ['nose>=0.10.1', 'requests', 'testpath', 'pygments', 'nbformat', 'ipykernel'],\n    terminal = [],\n    kernel = ['ipykernel'],\n    nbformat = ['nbformat'],\n    notebook = ['notebook', 'ipywidgets'],\n    nbconvert = ['nbconvert'],\n)\n\ninstall_requires = [\n    'setuptools>=18.5',\n    'jedi>=0.10',\n    'decorator',\n    'pickleshare',\n    'simplegeneric>0.8',\n    'traitlets>=4.2',\n    'prompt_toolkit>=1.0.4,<2.0.0',\n    'pygments',\n]\n\n# Platform-specific dependencies:\n# This is the correct way to specify these,\n# but requires pip >= 6. pip < 6 ignores these.\n\nextras_require.update({\n    'test:python_version >= \"3.4\"': ['numpy'],\n    ':python_version == \"3.3\"': ['pathlib2'],\n    ':python_version <= \"3.4\"': ['typing'],\n    ':sys_platform != \"win32\"': ['pexpect'],\n    ':sys_platform == \"darwin\"': ['appnope'],\n    ':sys_platform == \"win32\"': ['colorama'],\n    ':sys_platform == \"win32\" and python_version < \"3.6\"': ['win_unicode_console>=0.5'],\n})\n# FIXME: re-specify above platform dependencies for pip < 6\n# These would result in non-portable bdists.\nif not any(arg.startswith('bdist') for arg in sys.argv):\n    if sys.platform == 'darwin':\n        install_requires.extend(['appnope'])\n\n    if not sys.platform.startswith('win'):\n        install_requires.append('pexpect')\n\n    # workaround pypa/setuptools#147, where setuptools misspells\n    # platform_python_implementation as python_implementation\n    if 'setuptools' in sys.modules:\n        for key in list(extras_require):\n            if 'platform_python_implementation' in key:\n                new_key = key.replace('platform_python_implementation', 'python_implementation')\n                extras_require[new_key] = extras_require.pop(key)\n\neverything = set()\nfor key, deps in extras_require.items():\n    if ':' not in key:\n        everything.update(deps)\nextras_require['all'] = everything\n\nif 'setuptools' in sys.modules:\n    setuptools_extra_args['python_requires'] = '>=3.3'\n    setuptools_extra_args['zip_safe'] = False\n    setuptools_extra_args['entry_points'] = {\n        'console_scripts': find_entry_points(),\n        'pygments.lexers': [\n            'ipythonconsole = IPython.lib.lexers:IPythonConsoleLexer',\n            'ipython = IPython.lib.lexers:IPythonLexer',\n            'ipython3 = IPython.lib.lexers:IPython3Lexer',\n        ],\n    }\n    setup_args['extras_require'] = extras_require\n    requires = setup_args['install_requires'] = install_requires\n\n    # Script to be run by the windows binary installer after the default setup\n    # routine, to add shortcuts and similar windows-only things.  Windows\n    # post-install scripts MUST reside in the scripts/ dir, otherwise distutils\n    # doesn't find them.\n    if 'bdist_wininst' in sys.argv:\n        if len(sys.argv) > 2 and \\\n               ('sdist' in sys.argv or 'bdist_rpm' in sys.argv):\n            print(\"ERROR: bdist_wininst must be run alone. Exiting.\", file=sys.stderr)\n            sys.exit(1)\n        setup_args['data_files'].append(\n            ['Scripts', ('scripts/ipython.ico', 'scripts/ipython_nb.ico')])\n        setup_args['scripts'] = [pjoin('scripts','ipython_win_post_install.py')]\n        setup_args['options'] = {\"bdist_wininst\":\n                                 {\"install_script\":\n                                  \"ipython_win_post_install.py\"}}\n\nelse:\n    # scripts has to be a non-empty list, or install_scripts isn't called\n    setup_args['scripts'] = [e.split('=')[0].strip() for e in find_entry_points()]\n\n    setup_args['cmdclass']['build_scripts'] = build_scripts_entrypt\n\n#---------------------------------------------------------------------------\n# Do the actual setup now\n#---------------------------------------------------------------------------\n\nsetup_args.update(setuptools_extra_args)\n\n\n\ndef main():\n    setup(**setup_args)\n\nif __name__ == '__main__':\n    main()\n", "path": "setup.py"}]}