setup.py 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. #!/usr/bin/env python
  2. import distutils
  3. import io
  4. import json
  5. import os
  6. import setuptools
  7. import setuptools.command.build_py
  8. import distutils.command.build
  9. node_dependencies = [
  10. ( 'netron', [
  11. 'node_modules/d3/dist/d3.min.js',
  12. 'node_modules/dagre/dist/dagre.min.js',
  13. 'node_modules/handlebars/dist/handlebars.min.js',
  14. 'node_modules/marked/marked.min.js',
  15. 'node_modules/pako/dist/pako.min.js',
  16. 'node_modules/protobufjs/dist/protobuf.min.js',
  17. 'node_modules/flatbuffers/js/flatbuffers.js',
  18. 'node_modules/npm-font-open-sans/open-sans.css' ]),
  19. ( 'netron/fonts/Regular', [
  20. 'node_modules/npm-font-open-sans/fonts/Regular/OpenSans-Regular.eot',
  21. 'node_modules/npm-font-open-sans/fonts/Regular/OpenSans-Regular.svg',
  22. 'node_modules/npm-font-open-sans/fonts/Regular/OpenSans-Regular.ttf',
  23. 'node_modules/npm-font-open-sans/fonts/Regular/OpenSans-Regular.woff',
  24. 'node_modules/npm-font-open-sans/fonts/Regular/OpenSans-Regular.woff2' ]),
  25. ( 'netron/fonts/Semibold', [
  26. 'node_modules/npm-font-open-sans/fonts/Semibold/OpenSans-Semibold.eot',
  27. 'node_modules/npm-font-open-sans/fonts/Semibold/OpenSans-Semibold.svg',
  28. 'node_modules/npm-font-open-sans/fonts/Semibold/OpenSans-Semibold.ttf',
  29. 'node_modules/npm-font-open-sans/fonts/Semibold/OpenSans-Semibold.woff',
  30. 'node_modules/npm-font-open-sans/fonts/Semibold/OpenSans-Semibold.woff2' ]),
  31. ( 'netron/fonts/Bold', [
  32. 'node_modules/npm-font-open-sans/fonts/Bold/OpenSans-Bold.eot',
  33. 'node_modules/npm-font-open-sans/fonts/Bold/OpenSans-Bold.svg',
  34. 'node_modules/npm-font-open-sans/fonts/Bold/OpenSans-Bold.ttf',
  35. 'node_modules/npm-font-open-sans/fonts/Bold/OpenSans-Bold.woff',
  36. 'node_modules/npm-font-open-sans/fonts/Bold/OpenSans-Bold.woff2' ])
  37. ]
  38. class build(distutils.command.build.build):
  39. user_options = distutils.command.build.build.user_options + [ ('version', None, 'lalala' ) ]
  40. def initialize_options(self):
  41. distutils.command.build.build.initialize_options(self)
  42. self.version = None
  43. def finalize_options(self):
  44. distutils.command.build.build.finalize_options(self)
  45. def run(self):
  46. if self.version:
  47. build_py.version = True;
  48. else:
  49. build_py.version = False;
  50. return distutils.command.build.build.run(self)
  51. class build_py(setuptools.command.build_py.build_py):
  52. user_options = setuptools.command.build_py.build_py.user_options + [ ('version', None, 'lalala' ) ]
  53. def initialize_options(self):
  54. setuptools.command.build_py.build_py.initialize_options(self)
  55. self.version = None
  56. def finalize_options(self):
  57. setuptools.command.build_py.build_py.finalize_options(self)
  58. def run(self):
  59. result = setuptools.command.build_py.build_py.run(self)
  60. for target, files in node_dependencies:
  61. target = os.path.join(self.build_lib, target)
  62. if not os.path.exists(target):
  63. os.makedirs(target)
  64. for file in files:
  65. self.copy_file(file, target)
  66. return result
  67. def build_module(self, module, module_file, package):
  68. setuptools.command.build_py.build_py.build_module(self, module, module_file, package)
  69. if build_py.version and module == '__version__':
  70. package = package.split('.')
  71. outfile = self.get_module_outfile(self.build_lib, package, module)
  72. with open(outfile, 'w+') as f:
  73. f.write("__version__ = '" + package_version() + "'\n")
  74. def package_version():
  75. folder = os.path.realpath(os.path.dirname(__file__))
  76. with open(os.path.join(folder, 'package.json')) as package_file:
  77. package_manifest = json.load(package_file)
  78. return package_manifest['version']
  79. setuptools.setup(
  80. name="netron",
  81. version=package_version(),
  82. description="Viewer for neural network, deep learning and machine learning models",
  83. long_description='Netron is a viewer for neural network, deep learning and machine learning models.\n\n' +
  84. 'Netron supports **ONNX** (`.onnx`, `.pb`), **Keras** (`.h5`, `.keras`), **CoreML** (`.mlmodel`) and **TensorFlow Lite** (`.tflite`). Netron has experimental support for **Caffe** (`.caffemodel`), **Caffe2** (`predict_net.pb`), **MXNet** (`-symbol.json`), **TensorFlow.js** (`model.json`, `.pb`) and **TensorFlow** (`.pb`, `.meta`).',
  85. keywords=[
  86. 'onnx', 'keras', 'tensorflow', 'coreml', 'mxnet', 'caffe', 'caffe2',
  87. 'artificial intelligence', 'machine learning', 'deep learning', 'neural network',
  88. 'visualizer', 'viewer'
  89. ],
  90. license="MIT",
  91. cmdclass={
  92. 'build': build,
  93. 'build_py': build_py
  94. },
  95. package_dir={
  96. 'netron': 'src'
  97. },
  98. packages=[
  99. 'netron'
  100. ],
  101. package_data={
  102. 'netron': [
  103. 'favicon.ico', 'icon.png',
  104. 'numpy.js', 'zip.js', 'tar.js', 'gzip.js',
  105. 'onnx.js', 'onnx.js', 'onnx-metadata.json',
  106. 'coreml.js', 'coreml-metadata.json', 'coreml-proto.js',
  107. 'caffe.js', 'caffe-metadata.json', 'caffe-proto.js',
  108. 'caffe2.js', 'caffe2-metadata.json', 'caffe2-proto.js',
  109. 'keras.js', 'keras-metadata.json', 'hdf5.js',
  110. 'mxnet.js', 'mxnet-metadata.json',
  111. 'cntk.js', 'cntk-metadata.json', 'cntk-proto.js',
  112. 'pytorch.js', 'pytorch-metadata.json', 'pickle.js',
  113. 'sklearn.js', 'sklearn-metadata.json',
  114. 'tf.js', 'tf-metadata.json', 'tf-proto.js',
  115. 'tflite.js', 'tflite-metadata.json', 'tflite-schema.js',
  116. 'view-browser.html', 'view-browser.js',
  117. 'view-grapher.css', 'view-grapher.js',
  118. 'view-sidebar.css', 'view-sidebar.js',
  119. 'view.js', 'view.css',
  120. 'server.py'
  121. ]
  122. },
  123. install_requires=[],
  124. author='Lutz Roeder',
  125. author_email='[email protected]',
  126. url='https://github.com/lutzroeder/netron',
  127. entry_points={
  128. 'console_scripts': [ 'netron = netron:main' ]
  129. },
  130. classifiers=[
  131. 'Intended Audience :: Developers',
  132. 'Intended Audience :: Education',
  133. 'Intended Audience :: Science/Research',
  134. 'Programming Language :: Python :: 2',
  135. 'Programming Language :: Python :: 2.7',
  136. 'Programming Language :: Python :: 3',
  137. 'Programming Language :: Python :: 3.6',
  138. 'Topic :: Software Development',
  139. 'Topic :: Software Development :: Libraries',
  140. 'Topic :: Software Development :: Libraries :: Python Modules',
  141. 'Topic :: Scientific/Engineering',
  142. 'Topic :: Scientific/Engineering :: Mathematics',
  143. 'Topic :: Scientific/Engineering :: Artificial Intelligence',
  144. 'Topic :: Scientific/Engineering :: Visualization'
  145. ]
  146. )