-
Notifications
You must be signed in to change notification settings - Fork 234
/
setup.py
117 lines (102 loc) · 3.51 KB
/
setup.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
from __future__ import print_function
from setuptools import setup, find_packages, Command
from jupyter_packaging import (
create_cmdclass,
install_npm,
ensure_targets,
combine_commands,
get_version,
)
import os
from os.path import join as pjoin
from pathlib import Path
from distutils import log
here = os.path.dirname(os.path.abspath(__file__))
def skip_if_exists(paths, CommandClass):
"""Skip a command if list of paths exists."""
def should_skip():
return any(not Path(path).exist() for path in paths)
class SkipIfExistCommand(Command):
def initialize_options(self):
if not should_skip:
self.command = CommandClass(self.distribution)
self.command.initialize_options()
else:
self.command = None
def finalize_options(self):
if self.command is not None:
self.command.finalize_options()
def run(self):
if self.command is not None:
self.command.run()
return SkipIfExistCommand
# jupyter lab install will fail it we print out info
# log.set_verbosity(log.DEBUG)
# log.info('setup.py entered')
# log.info('$PATH=%s' % os.environ['PATH'])
def read(fname):
return open(os.path.join(os.path.dirname(__file__), fname)).read()
name = 'ipyvolume'
LONG_DESCRIPTION = read("README.rst")
version = get_version(pjoin(name, '_version.py'))
js_dir = pjoin(here, 'js')
jstargets = [
pjoin(js_dir, 'lib', 'index.js'),
pjoin('share', 'jupyter', 'nbextensions', 'ipyvolume', 'index.js'),
]
data_files_spec = [
('share/jupyter/nbextensions/ipyvolume', 'share/jupyter/nbextensions/ipyvolume', '*.js'),
('share/jupyter/labextensions/ipyvolume', 'share/jupyter/labextensions/ipyvolume', '*'),
('share/jupyter/labextensions/ipyvolume/static', 'share/jupyter/labextensions/ipyvolume/static', '*'),
('etc/jupyter/nbconfig/notebook.d', 'etc/jupyter/nbconfig/notebook.d', 'ipyvolume.json'),
]
js_command = combine_commands(
install_npm(js_dir, build_cmd='build'), ensure_targets(jstargets),
)
cmdclass = create_cmdclass('jsdeps', data_files_spec=data_files_spec)
is_repo = os.path.exists(os.path.join(here, '.git'))
if is_repo:
cmdclass['jsdeps'] = js_command
else:
cmdclass['jsdeps'] = skip_if_exists(jstargets, js_command)
setup(
name="ipyvolume",
version=version,
description='IPython widget for rendering 3d volumes',
long_description=LONG_DESCRIPTION,
include_package_data=True,
cmdclass=cmdclass,
install_requires=[
'ipywidgets>=7.0.0',
'bqplot',
'numpy',
'traittypes',
'traitlets',
'Pillow',
'ipywebrtc',
'requests',
'ipyvuetify',
'ipyvue>=1.7.0',
'pythreejs>=2.4.0',
'matplotlib'
],
license='MIT',
packages=find_packages(),
zip_safe=False,
author='Maarten A. Breddels',
author_email='maartenbreddels@gmail.com',
url='https://github.com/maartenbreddels/ipyvolume',
keywords=['ipython', 'jupyter', 'widgets', 'volume rendering'],
classifiers=[
'Development Status :: 4 - Beta',
'Framework :: IPython',
'Intended Audience :: Developers',
'Intended Audience :: Science/Research',
'Topic :: Multimedia :: Graphics',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8',
],
package_data={'ipyvolume.vue': ['*.vue']},
)