Show More
@@ -35,3 +35,4 global-exclude *.pyc | |||
|
35 | 35 | global-exclude *.pyo |
|
36 | 36 | global-exclude .dircopy.log |
|
37 | 37 | global-exclude .git |
|
38 | global-exclude .ipynb_checkpoints |
@@ -67,6 +67,7 from setupbase import ( | |||
|
67 | 67 | update_submodules, |
|
68 | 68 | require_submodules, |
|
69 | 69 | UpdateSubmodules, |
|
70 | get_bdist_wheel, | |
|
70 | 71 | CompileCSS, |
|
71 | 72 | JavascriptVersion, |
|
72 | 73 | install_symlinked, |
@@ -242,8 +243,8 setup_args['cmdclass'] = { | |||
|
242 | 243 | # For some commands, use setuptools. Note that we do NOT list install here! |
|
243 | 244 | # If you want a setuptools-enhanced install, just run 'setupegg.py install' |
|
244 | 245 | needs_setuptools = set(('develop', 'release', 'bdist_egg', 'bdist_rpm', |
|
245 |
'bdist', 'bdist_dumb', 'bdist_wininst', ' |
|
|
246 | 'egg_info', 'easy_install', 'upload', | |
|
246 | 'bdist', 'bdist_dumb', 'bdist_wininst', 'bdist_wheel', | |
|
247 | 'egg_info', 'easy_install', 'upload', 'install_egg_info', | |
|
247 | 248 | )) |
|
248 | 249 | if sys.platform == 'win32': |
|
249 | 250 | # Depend on setuptools for install on *Windows only* |
@@ -259,43 +260,38 if len(needs_setuptools.intersection(sys.argv)) > 0: | |||
|
259 | 260 | # specific to setup |
|
260 | 261 | setuptools_extra_args = {} |
|
261 | 262 | |
|
263 | # setuptools requirements | |
|
264 | ||
|
265 | extras_require = dict( | |
|
266 | parallel = ['pyzmq>=2.1.11'], | |
|
267 | qtconsole = ['pyzmq>=2.1.11', 'pygments'], | |
|
268 | zmq = ['pyzmq>=2.1.11'], | |
|
269 | doc = ['Sphinx>=1.1', 'numpydoc'], | |
|
270 | test = ['nose>=0.10.1'], | |
|
271 | notebook = ['tornado>=3.1', 'pyzmq>=2.1.11', 'jinja2'], | |
|
272 | nbconvert = ['pygments', 'jinja2', 'Sphinx>=0.3'] | |
|
273 | ) | |
|
274 | everything = set() | |
|
275 | for deps in extras_require.values(): | |
|
276 | everything.update(deps) | |
|
277 | extras_require['all'] = everything | |
|
278 | install_requires = [] | |
|
279 | if sys.platform == 'darwin': | |
|
280 | install_requires.append('readline') | |
|
281 | elif sys.platform.startswith('win'): | |
|
282 | # Pyreadline has unicode and Python 3 fixes in 2.0 | |
|
283 | install_requires.append('pyreadline>=2.0') | |
|
284 | ||
|
262 | 285 | if 'setuptools' in sys.modules: |
|
263 | 286 | # setup.py develop should check for submodules |
|
264 | 287 | from setuptools.command.develop import develop |
|
265 | 288 | setup_args['cmdclass']['develop'] = require_submodules(develop) |
|
289 | setup_args['cmdclass']['bdist_wheel'] = get_bdist_wheel() | |
|
266 | 290 | |
|
267 | 291 | setuptools_extra_args['zip_safe'] = False |
|
268 | 292 | setuptools_extra_args['entry_points'] = {'console_scripts':find_entry_points()} |
|
269 |
setup_args['extras_require'] = |
|
|
270 | parallel = 'pyzmq>=2.1.11', | |
|
271 | qtconsole = ['pyzmq>=2.1.11', 'pygments'], | |
|
272 | zmq = 'pyzmq>=2.1.11', | |
|
273 | doc = ['Sphinx>=1.1', 'numpydoc'], | |
|
274 | test = 'nose>=0.10.1', | |
|
275 | notebook = ['tornado>=3.1', 'pyzmq>=2.1.11', 'jinja2'], | |
|
276 | nbconvert = ['pygments', 'jinja2', 'Sphinx>=0.3'] | |
|
277 | ) | |
|
278 | everything = set() | |
|
279 | for deps in setup_args['extras_require'].values(): | |
|
280 | if not isinstance(deps, list): | |
|
281 | deps = [deps] | |
|
282 | for dep in deps: | |
|
283 | everything.add(dep) | |
|
284 | setup_args['extras_require']['all'] = everything | |
|
285 | ||
|
286 | requires = setup_args.setdefault('install_requires', []) | |
|
287 | setupext.display_status = False | |
|
288 | if not setupext.check_for_readline(): | |
|
289 | if sys.platform == 'darwin': | |
|
290 | requires.append('readline') | |
|
291 | elif sys.platform.startswith('win'): | |
|
292 | # Pyreadline 64 bit windows issue solved in versions >=1.7.1 | |
|
293 | # Also solves issues with some older versions of pyreadline that | |
|
294 | # satisfy the unconstrained depdendency. | |
|
295 | requires.append('pyreadline>=1.7.1') | |
|
296 | else: | |
|
297 | pass | |
|
298 | # do we want to install readline here? | |
|
293 | setup_args['extras_require'] = extras_require | |
|
294 | requires = setup_args['install_requires'] = install_requires | |
|
299 | 295 | |
|
300 | 296 | # Script to be run by the windows binary installer after the default setup |
|
301 | 297 | # routine, to add shortcuts and similar windows-only things. Windows |
@@ -314,10 +310,13 if 'setuptools' in sys.modules: | |||
|
314 | 310 | "ipython_win_post_install.py"}} |
|
315 | 311 | |
|
316 | 312 | else: |
|
317 |
# If we are |
|
|
313 | # If we are installing without setuptools, call this function which will | |
|
318 | 314 | # check for dependencies an inform the user what is needed. This is |
|
319 | 315 | # just to make life easy for users. |
|
320 | check_for_dependencies() | |
|
316 | for install_cmd in ('install', 'symlink'): | |
|
317 | if install_cmd in sys.argv: | |
|
318 | check_for_dependencies() | |
|
319 | break | |
|
321 | 320 | # scripts has to be a non-empty list, or install_scripts isn't called |
|
322 | 321 | setup_args['scripts'] = [e.split('=')[0].strip() for e in find_entry_points()] |
|
323 | 322 |
@@ -127,23 +127,44 def find_package_data(): | |||
|
127 | 127 | # This is not enough for these things to appear in an sdist. |
|
128 | 128 | # We need to muck with the MANIFEST to get this to work |
|
129 | 129 | |
|
130 | # exclude static things that we don't ship (e.g. mathjax) | |
|
131 | excludes = ['mathjax'] | |
|
130 | # exclude components from the walk, | |
|
131 | # we will build the components separately | |
|
132 | excludes = ['components'] | |
|
132 | 133 | |
|
133 | 134 | # add 'static/' prefix to exclusions, and tuplify for use in startswith |
|
134 |
excludes = tuple([ |
|
|
135 | excludes = tuple([pjoin('static', ex) for ex in excludes]) | |
|
135 | 136 | |
|
136 | 137 | # walk notebook resources: |
|
137 | 138 | cwd = os.getcwd() |
|
138 | 139 | os.chdir(os.path.join('IPython', 'html')) |
|
139 | static_walk = list(os.walk('static')) | |
|
140 | 140 | static_data = [] |
|
141 |
for parent, dirs, files in static |
|
|
141 | for parent, dirs, files in os.walk('static'): | |
|
142 | 142 | if parent.startswith(excludes): |
|
143 | 143 | continue |
|
144 | 144 | for f in files: |
|
145 |
static_data.append( |
|
|
146 | ||
|
145 | static_data.append(pjoin(parent, f)) | |
|
146 | components = pjoin("static", "components") | |
|
147 | # select the components we actually need to install | |
|
148 | # (there are lots of resources we bundle for sdist-reasons that we don't actually use) | |
|
149 | static_data.extend([ | |
|
150 | pjoin(components, "backbone", "backbone-min.js"), | |
|
151 | pjoin(components, "bootstrap", "bootstrap", "js", "bootstrap.min.js"), | |
|
152 | pjoin(components, "font-awesome", "font", "*.*"), | |
|
153 | pjoin(components, "highlight.js", "build", "highlight.pack.js"), | |
|
154 | pjoin(components, "jquery", "jquery.min.js"), | |
|
155 | pjoin(components, "jquery-ui", "ui", "minified", "jquery-ui.min.js"), | |
|
156 | pjoin(components, "jquery-ui", "themes", "smoothness", "jquery-ui.min.css"), | |
|
157 | pjoin(components, "marked", "lib", "marked.js"), | |
|
158 | pjoin(components, "requirejs", "require.js"), | |
|
159 | pjoin(components, "underscore", "underscore-min.js"), | |
|
160 | ]) | |
|
161 | ||
|
162 | # Ship all of Codemirror's CSS and JS | |
|
163 | for parent, dirs, files in os.walk(pjoin(components, 'codemirror')): | |
|
164 | for f in files: | |
|
165 | if f.endswith(('.js', '.css')): | |
|
166 | static_data.append(pjoin(parent, f)) | |
|
167 | ||
|
147 | 168 | os.chdir(os.path.join('tests',)) |
|
148 | 169 | js_tests = glob('casperjs/*.*') + glob('casperjs/*/*') |
|
149 | 170 | |
@@ -157,7 +178,6 def find_package_data(): | |||
|
157 | 178 | 'IPython.config.profile' : ['README*', '*/*.py'], |
|
158 | 179 | 'IPython.core.tests' : ['*.png', '*.jpg'], |
|
159 | 180 | 'IPython.lib.tests' : ['*.wav'], |
|
160 | 'IPython.testing' : ['*.txt'], | |
|
161 | 181 | 'IPython.testing.plugin' : ['*.txt'], |
|
162 | 182 | 'IPython.html' : ['templates/*'] + static_data, |
|
163 | 183 | 'IPython.html.tests' : js_tests, |
@@ -167,6 +187,17 def find_package_data(): | |||
|
167 | 187 | 'IPython.nbconvert.filters' : ['marked.js'], |
|
168 | 188 | 'IPython.nbformat' : ['tests/*.ipynb'] |
|
169 | 189 | } |
|
190 | ||
|
191 | # verify that package_data makes sense | |
|
192 | for pkg, data in package_data.items(): | |
|
193 | pkg_root = pjoin(*pkg.split('.')) | |
|
194 | for d in data: | |
|
195 | path = pjoin(pkg_root, d) | |
|
196 | if '*' in path: | |
|
197 | assert len(glob(path)) > 0, "No files match pattern %s" % path | |
|
198 | else: | |
|
199 | assert os.path.exists(path), "Missing package data: %s" % path | |
|
200 | ||
|
170 | 201 | return package_data |
|
171 | 202 | |
|
172 | 203 | |
@@ -215,10 +246,9 def find_data_files(): | |||
|
215 | 246 | """ |
|
216 | 247 | Find IPython's data_files. |
|
217 | 248 | |
|
218 | Most of these are docs. | |
|
249 | Just man pages at this point. | |
|
219 | 250 | """ |
|
220 | 251 | |
|
221 | docdirbase = pjoin('share', 'doc', 'ipython') | |
|
222 | 252 | manpagebase = pjoin('share', 'man', 'man1') |
|
223 | 253 | |
|
224 | 254 | # Simple file lists can be made by hand |
@@ -227,24 +257,8 def find_data_files(): | |||
|
227 | 257 | # When running from a source tree, the manpages aren't gzipped |
|
228 | 258 | manpages = [f for f in glob(pjoin('docs','man','*.1')) if isfile(f)] |
|
229 | 259 | |
|
230 | igridhelpfiles = [f for f in glob(pjoin('IPython','extensions','igrid_help.*')) if isfile(f)] | |
|
231 | ||
|
232 | # For nested structures, use the utility above | |
|
233 | example_files = make_dir_struct( | |
|
234 | 'data', | |
|
235 | pjoin('docs','examples'), | |
|
236 | pjoin(docdirbase,'examples') | |
|
237 | ) | |
|
238 | manual_files = make_dir_struct( | |
|
239 | 'data', | |
|
240 | pjoin('docs','html'), | |
|
241 | pjoin(docdirbase,'manual') | |
|
242 | ) | |
|
243 | ||
|
244 | 260 | # And assemble the entire output list |
|
245 |
data_files = [ (manpagebase, manpages) |
|
|
246 | (pjoin(docdirbase, 'extensions'), igridhelpfiles), | |
|
247 | ] + manual_files + example_files | |
|
261 | data_files = [ (manpagebase, manpages) ] | |
|
248 | 262 | |
|
249 | 263 | return data_files |
|
250 | 264 | |
@@ -452,7 +466,8 def check_for_dependencies(): | |||
|
452 | 466 | check_for_sphinx() |
|
453 | 467 | check_for_pygments() |
|
454 | 468 | check_for_nose() |
|
455 | check_for_pexpect() | |
|
469 | if os.name == 'posix': | |
|
470 | check_for_pexpect() | |
|
456 | 471 | check_for_pyzmq() |
|
457 | 472 | check_for_tornado() |
|
458 | 473 | check_for_readline() |
@@ -556,6 +571,70 def require_submodules(command): | |||
|
556 | 571 | return DecoratedCommand |
|
557 | 572 | |
|
558 | 573 | #--------------------------------------------------------------------------- |
|
574 | # bdist related | |
|
575 | #--------------------------------------------------------------------------- | |
|
576 | ||
|
577 | def get_bdist_wheel(): | |
|
578 | """Construct bdist_wheel command for building wheels | |
|
579 | ||
|
580 | Constructs py2-none-any tag, instead of py2.7-none-any | |
|
581 | """ | |
|
582 | class RequiresWheel(Command): | |
|
583 | description = "Dummy command for missing bdist_wheel" | |
|
584 | user_options = [] | |
|
585 | ||
|
586 | def initialize_options(self): | |
|
587 | pass | |
|
588 | ||
|
589 | def finalize_options(self): | |
|
590 | pass | |
|
591 | ||
|
592 | def run(self): | |
|
593 | print("bdist_wheel requires the wheel package") | |
|
594 | sys.exit(1) | |
|
595 | ||
|
596 | if 'setuptools' not in sys.modules: | |
|
597 | return RequiresWheel | |
|
598 | else: | |
|
599 | try: | |
|
600 | from wheel.bdist_wheel import bdist_wheel, read_pkg_info, write_pkg_info | |
|
601 | except ImportError: | |
|
602 | return RequiresWheel | |
|
603 | ||
|
604 | class bdist_wheel_tag(bdist_wheel): | |
|
605 | ||
|
606 | def get_tag(self): | |
|
607 | return ('py%i' % sys.version_info[0], 'none', 'any') | |
|
608 | ||
|
609 | def add_requirements(self, metadata_path): | |
|
610 | """transform platform-dependent requirements""" | |
|
611 | pkg_info = read_pkg_info(metadata_path) | |
|
612 | # pkg_info is an email.Message object (?!) | |
|
613 | # we have to remove the unconditional 'readline' and/or 'pyreadline' entries | |
|
614 | # and transform them to conditionals | |
|
615 | requires = pkg_info.get_all('Requires-Dist') | |
|
616 | del pkg_info['Requires-Dist'] | |
|
617 | def _remove_startswith(lis, prefix): | |
|
618 | """like list.remove, but with startswith instead of ==""" | |
|
619 | found = False | |
|
620 | for idx, item in enumerate(lis): | |
|
621 | if item.startswith(prefix): | |
|
622 | found = True | |
|
623 | break | |
|
624 | if found: | |
|
625 | lis.pop(idx) | |
|
626 | ||
|
627 | for pkg in ("readline", "pyreadline"): | |
|
628 | _remove_startswith(requires, pkg) | |
|
629 | requires.append("readline; sys.platform == 'darwin'") | |
|
630 | requires.append("pyreadline (>=2.0); sys.platform == 'win32'") | |
|
631 | for r in requires: | |
|
632 | pkg_info['Requires-Dist'] = r | |
|
633 | write_pkg_info(metadata_path, pkg_info) | |
|
634 | ||
|
635 | return bdist_wheel_tag | |
|
636 | ||
|
637 | #--------------------------------------------------------------------------- | |
|
559 | 638 | # Notebook related |
|
560 | 639 | #--------------------------------------------------------------------------- |
|
561 | 640 |
@@ -107,7 +107,7 def check_for_pexpect(): | |||
|
107 | 107 | try: |
|
108 | 108 | import pexpect |
|
109 | 109 | except ImportError: |
|
110 |
print_status("pexpect", "no ( |
|
|
110 | print_status("pexpect", "no (will use bundled version in IPython.external)") | |
|
111 | 111 | return False |
|
112 | 112 | else: |
|
113 | 113 | print_status("pexpect", pexpect.__version__) |
General Comments 0
You need to be logged in to leave comments.
Login now