Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1# -*- coding: utf-8 -*- 

2""" 

3@file 

4@brief Defines a set of modules for more machine learning, tools, networks, visualization. 

5""" 

6import sys 

7from ..installhelper.module_install import ModuleInstall 

8from .config_helper import is_64bit 

9 

10 

11def extended_set(): 

12 """ 

13 list of modules to install, an rich set, to work with data and more, it requires the modules in set *small* 

14 """ 

15 mod = [ 

16 ModuleInstall("m2r", "pip", 

17 purpose="M2R converts a markdown file including reStructuredText (rst) markups to a valid rst format."), 

18 ModuleInstall("CommonMark", "pip", mname="commonmark", 

19 purpose="Python parser for the CommonMark Markdown spec"), 

20 ModuleInstall("recommonmark", "pip", 

21 purpose="For pymc3???"), 

22 ModuleInstall("algopy", "pip", usage="OPTIM", 

23 purpose="ALGOPY: Taylor Arithmetic Computation and Algorithmic Differentiation"), 

24 ModuleInstall("numdifftools", "pip", usage="OPTIM", 

25 purpose="Solves automatic numerical differentiation problems in one or more variables."), 

26 ModuleInstall("numpydoc", "pip", 

27 purpose="Sphinx extension to support docstrings in Numpy format"), 

28 ModuleInstall("Automat", "pip", mname="automat", 

29 purpose="Self-service finite-state machines for the programmer on the go."), 

30 ModuleInstall("guidata", "pip" if not sys.platform.startswith("win") else "wheel2", 

31 purpose="Automatic graphical user interfaces generation for easy dataset editing and display"), 

32 ModuleInstall( 

33 "guiqwt", "wheel", purpose="Efficient 2D plotting Python library based on PythonQwt (Spyder)"), 

34 ModuleInstall( 

35 "QtAwesome", "pip", mname="qtawesome", 

36 purpose="QtAwesome enables iconic fonts such as Font Awesome and Elusive Icons in PyQt and PySide applications."), 

37 ModuleInstall( 

38 "natgrid", "wheel", mname="mpl_toolkits.natgrid", 

39 purpose="Python interface to NCAR natgrid library (for matplotlib)"), 

40 ModuleInstall( 

41 "py", "pip", purpose="library with cross-python path, ini-parsing, io, code, log facilities"), 

42 ModuleInstall("pluggy", "pip", 

43 purpose="plugin and hook calling mechanisms for python"), 

44 ModuleInstall("atomicwrites", "pip", purpose="Atomic file writes."), 

45 ModuleInstall("pytest", "pip", 

46 purpose="pytest: simple powerful testing with Python"), 

47 ModuleInstall( 

48 "blist", "wheel", 

49 purpose="a list-like type with better asymptotic performance and similar performance on small lists"), 

50 ModuleInstall( 

51 "blz", "wheel", 

52 purpose="blz: a compressed data container"), 

53 ModuleInstall("pamela", "pip", 

54 purpose="An interface to the Pluggable Authentication Modules (PAM) " + 

55 "library on linux, written in pure python (using ctypes)") 

56 if not sys.platform.startswith("win") else None, 

57 ModuleInstall("async_generator", "pip", purpose="for jupyterhup"), 

58 ModuleInstall("python_oauth2", "pip", purpose="for jupyterhup"), 

59 ModuleInstall( 

60 "jupyterhub", "pip", purpose="JupyterHub: A multi-user server for Jupyter notebooks", usage="JUPYTER") 

61 if not sys.platform.startswith("win") else None, 

62 ModuleInstall('rpy2', 'wheel', purpose="interact with R (R_HOME needs to be set up on Linux)", 

63 usage="DATA/ML"), 

64 ModuleInstall('python-pptx', 'pip', mname="pptx", 

65 purpose="read/write PowerPoint presentation"), 

66 ModuleInstall( 

67 'python-docx', 'pip', mname="docx", purpose="read/write Word document"), 

68 # ModuleInstall('flasksphinx', 'pip', purpose="serves Sphinx 

69 # documentation through a Flask server"), # issue with Python 3 

70 ModuleInstall( 

71 'cffi', 'wheel', usage="C++", purpose="Foreign Function Interface for Python calling C code."), 

72 ModuleInstall( 

73 'datashape', 'pip', purpose="A data description language."), 

74 ModuleInstall( 

75 'ordereddict', 'pip', purpose="Python's collections.OrderedDict") if sys.version_info[0] == 2 else None, 

76 ModuleInstall( 

77 'cyordereddict', 'wheel', purpose="Cython implementation of Python's collections.OrderedDict"), 

78 ModuleInstall('dynd', 'wheel', 

79 purpose="DyND-Python, a component of the Blaze project, " + 

80 "is the Python exposure of the DyND dynamic multi-dimensional array library.") 

81 if sys.version_info[0] >= 3 else None, 

82 ModuleInstall("mpmath", "pip", 

83 purpose="mpmath is a free (BSD licensed) Python library for real and complex " + 

84 "floating-point arithmetic with arbitrary precision."), 

85 ModuleInstall( 

86 'sympy', 'pip', purpose="SymPy is a Python library for symbolic mathematics."), 

87 ModuleInstall('gmpy2', 'wheel', 

88 purpose="big real numbers (issue on Linux and Anaconda)"), 

89 ModuleInstall('llvmlite', 'wheel', 

90 purpose="lightweight wrapper around basic LLVM functionality, check issue " + 

91 "https://github.com/cmderdev/cmder/issues/490 for missing api-ms-win-crt-runtime-l1-1-0.dll"), 

92 ModuleInstall('numba', 'wheel', usage="C++", 

93 purpose="Numba is an Open Source NumPy-aware optimizing compiler for Python sponsored by Continuum Analytics, Inc."), 

94 ModuleInstall('scikit-image', 'wheel', mname='skimage', 

95 purpose="scikit-image is a collection of algorithms for image processing."), 

96 ModuleInstall( 

97 'cvxopt', 'wheel', purpose="linear, quadratique optimization", usage="OPTIM"), 

98 ModuleInstall( 

99 'PyWavelets', 'wheel', mname='pywt', purpose="wavelets computation", usage="DATA/ML"), 

100 ModuleInstall('pyclustering', 'pip', 

101 purpose="many kinds of clustering (Optics, DBScan, x-means, ...)", usage="DATA/ML"), 

102 ModuleInstall( 

103 'pycosat', 'wheel', purpose="PicoSAT is a popular SAT solver written by Armin Biere in pure C."), 

104 ModuleInstall('pyshp', 'pip', mname='shapefile', 

105 purpose="Pure Python read/write support for ESRI Shapefile format"), 

106 ModuleInstall('Shapely', 'wheel', mname='shapely', 

107 purpose="Manipulation and analysis of geometric objects in the Cartesian plane."), 

108 ModuleInstall('descartes', 'pip', 

109 purpose="Use Shapely or GeoJSON-like geometric objects as matplotlib paths and patches"), 

110 ModuleInstall('geopandas', 'pip', 

111 purpose="GeoPandas is an open source project to make working with geospatial data in python easier. "), 

112 ModuleInstall( 

113 'vispy', 'pip', purpose="Vispy is a high-performance interactive 2D/3D data visualization library."), 

114 ModuleInstall( 

115 'selenium', 'pip', purpose="Python wrapper for Selenium", usage="NETWORK"), 

116 ModuleInstall( 

117 'splinter', 'pip', purpose="browser abstraction for web acceptance testing", usage="NETWORK"), 

118 ModuleInstall( 

119 'pygame', 'wheel', purpose="GUI, interface for games (needs to be installed from www.pygame.org on Linux)", usage="GUI"), 

120 ModuleInstall( 

121 'Kivy', 'wheel', mname='kivy', usage="GUI", 

122 purpose="GUI, interface for games, mobile (use sudo apt-get install python3-kivy on Linux)"), 

123 ModuleInstall('kivy-garden', 'pip', mname='kivy.garden', 

124 purpose="Garden tool for kivy flowers.", usage="GUI"), 

125 ModuleInstall( 

126 'py4j', 'pip', purpose="Enables Python programs to dynamically access arbitrary Java objects"), 

127 ModuleInstall( 

128 'lockfile', 'pip', purpose="Platform-independent file locking module"), 

129 ModuleInstall('python-daemon', 'pip', mname="daemon", 

130 purpose="Library to implement a well-behaved Unix daemon process (for luigi)"), 

131 ModuleInstall('cached_property', 'pip', 

132 purpose="A decorator for caching properties in classes (for luigi)"), 

133 ModuleInstall('luigi', 'pip', 

134 purpose="workflows, data workflows", usage="WORKFLOW"), 

135 # 

136 ModuleInstall('setproctitle', 'wheel', 

137 purpose="A Python module to customize the process title"), 

138 # thrift only works only for Python 2.7 

139 ModuleInstall( 

140 'ply', 'pip', purpose="Python Lex & Yacc (for thrifty)"), 

141 ModuleInstall( 

142 'thrift', 'pip', purpose="Python bindings for the Apache Thrift RPC system"), 

143 ModuleInstall( 

144 'thriftpy', 'pip', purpose="pure python implemention of Apache Thrift."), 

145 # ModuleInstall('airflow', 'pip'), # does not work on Python 3 

146 ModuleInstall( 

147 'branca', 'pip', purpose="", usage="VIZ"), 

148 ModuleInstall('folium', 'pip', usage="VIZ", 

149 purpose="This library is a spinoff from folium, that would host the " + 

150 "non-map-specific features. It may become a HTML+JS generation " + 

151 "library in the future."), 

152 ModuleInstall( 

153 'osmapi', 'pip', purpose="Python wrapper for the OSM API", usage="VIZ"), 

154 ModuleInstall('geographiclib', 'pip', 

155 purpose="This implements algorithms for geodesics (Karney, 2013) for solving " + 

156 "the direct and inverse problems for an ellipsoid of revolution."), 

157 ModuleInstall('geopy', 'pip', 

158 purpose="Python Geocoding Toolbox", usage="VIZ"), 

159 ModuleInstall('pyproj', 'wheel', 

160 purpose="python interface to PROJ4 library for cartographic transformations " + 

161 "https://jswhit.github.io/pyproj, needed by cartopy", usage="VIZ"), 

162 ModuleInstall('geojson', 'pip', 

163 purpose="Functions for encoding and decoding GeoJSON formatted data"), 

164 # Deprecated 

165 # ModuleInstall('basemap', 'wheel', mname='mpl_toolkits.basemap', 

166 # purpose="maps extension for matplotlib", usage="VIZ"), 

167 ModuleInstall('Cartopy', 'wheel', mname="cartopy", 

168 purpose="Cartopy is a Python package designed to make drawing maps for data analysis " + 

169 "and visualisation as easy as possible (issue on Linux and Anaconda)", usage="VIZ"), 

170 # the module cartopy requires GEOS https://trac.osgeo.org/geos/ 

171 # 

172 ModuleInstall("python3-linkedin", "pip", mname="linkedin", 

173 purpose="Python Interface to the LinkedIn API"), 

174 # access to linkedin 

175 ModuleInstall( 

176 "oauthlib", "pip", purpose="A generic, spec-compliant, thorough implementation of the OAuth request-signing logic"), 

177 ModuleInstall("requests-oauthlib", "pip", mname="requests_oauthlib", 

178 purpose="OAuthlib authentication support for Requests."), 

179 ModuleInstall("antlr4-python3-runtime", "pip", 

180 mname="antlr4", purpose="antlr4 runtime, grammar parser"), 

181 # ModuleInstall("unqlite", "pip"), # 

182 # key/value store (NoSQL) 

183 ModuleInstall("pycontracts", "pip", mname="contracts", # version="1.7.6", 

184 purpose="PyContracts is a Python package that allows to declare constraints on function parameters " + 

185 "and return values, setup for version 1.7.7 is bugged"), 

186 # 

187 ModuleInstall( 

188 "ecdsa", "pip", purpose="ECDSA cryptographic signature library (pure python)"), 

189 ModuleInstall("winrandom", "wheel", 

190 purpose="This module gives direct access to Windows Cryptographic API CryptGetRandom() function, " + 

191 "which is cryptographically strong pseudo-random number generator (PRNG) on Windows:"), 

192 ModuleInstall("pycrypto", "wheel2", mname="Crypto", 

193 purpose="Cryptographic modules for Python (not available on x64 and Python 3)"), 

194 ModuleInstall("pycryptodomex", "pip", mname="Cryptodome", 

195 purpose="Cryptographic modules for Python (not available on x64 and Python 3)"), 

196 ModuleInstall("xxhash", "wheel", 

197 purpose="xxHash is an Extremely fast Hash algorithm, running at RAM speed limits."), 

198 ModuleInstall("cryptography", "pip", 

199 purpose="cryptography is a package which provides cryptographic recipes and primitives to Python developers."), 

200 ModuleInstall( 

201 "pyasn1", "pip", purpose="ASN.1 types and codecs (for pysnmp)"), 

202 ModuleInstall("asn1crypto", "pip", 

203 purpose="Fast ASN.1 parser and serializer with definitions for private keys, " + 

204 "public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12, PKCS#5, X.509 and TSP"), 

205 ModuleInstall("PyNaCl", "pip", mname="nacl", 

206 purpose="Python binding to the Networking and Cryptography (NaCl) library", usage="NETWORK"), 

207 ModuleInstall("bcrypt", "pip", 

208 purpose="Modern password hashing for your software and your servers"), 

209 ModuleInstall("paramiko", "pip", 

210 purpose="SSH2 protocol library", usage="NETWORK"), 

211 # 

212 # 

213 # 2015-02-05 

214 # 

215 ModuleInstall("autopy3", "wheel", 

216 purpose="A simple, cross-platform GUI automation toolkit for Python 3 " + 

217 "(issue on Linux and Anaconda)") if sys.version_info[0] >= 3 else None, # simulate events 

218 # large double 

219 ModuleInstall("bigfloat", "wheel", 

220 purpose="big float (issue with Linux and Anaconda)"), 

221 # convex optimization, depends on CVXOPT 

222 ModuleInstall( 

223 "scs", "wheel", purpose="Solves convex cone programs via operator splitting.", usage="OPTIM"), 

224 ModuleInstall( 

225 "ecos", "wheel", purpose="ECOS is a numerical software for solving convex second-order cone programs (SOCPs)", usage="OPTIM"), 

226 ModuleInstall( 

227 "CVXcanon", "wheel", purpose="A low-level library to perform the matrix building step in cvxpy, " + 

228 "a convex optimization modeling software.", usage="OPTIM") if sys.version_info[:2] >= (3, 5) else None, 

229 ModuleInstall( 

230 "fastcache", "wheel", purpose="C implementation of Python 3 lru_cache for Python."), 

231 ModuleInstall( 

232 "multiprocess", "wheel", purpose="better multiprocessing and multithreading in python"), 

233 ModuleInstall("osqp", "wheel", 

234 purpose="The OSQP (Operator Splitting Quadratic Program) solver is a numerical optimization package for solving " + 

235 "quadratic problems") if sys.version_info[:2] >= (3, 5) else None, 

236 ModuleInstall("cvxpy", "pip", usage="OPTIM", 

237 purpose="linear, quadratic optimization, depends on cvxopt") if sys.version_info[:2] >= (3, 5) else None, 

238 # to install packages with conda 

239 ModuleInstall("libLAS", "wheel", mname="liblas", 

240 purpose="libLAS is a C/C++ library for reading and writing the very common LAS LiDAR format."), 

241 ModuleInstall( 

242 "liblinear", "wheel", purpose="A Library for Large Linear Classification"), 

243 ModuleInstall("marisa_trie", "wheel", 

244 purpose="Static memory-efficient & fast Trie-like structures for Python (based on marisa-trie C++ library)"), 

245 ModuleInstall( 

246 "mlpy", "wheel", purpose="mlpy is a Python module for Machine Learning built on top of NumPy/SciPy, has wavelets"), 

247 ModuleInstall( 

248 "pygit2", "wheel", purpose="Pygit2 is a set of Python bindings to the libgit2 shared library, " + 

249 "libgit2 implements the core of Git."), 

250 ModuleInstall( 

251 "pymongo", "wheel", purpose="Python wrapper for MongoDB", usage="NoSQL"), 

252 ModuleInstall("psycopg2", "wheel", 

253 purpose="Python-PostgreSQL Database Adapter"), 

254 ModuleInstall( 

255 "PyOpenGL", "wheel", mname="OpenGL", purpose="use OpenGL in Python"), 

256 ModuleInstall( 

257 "PyOpenGL_accelerate", "wheel", mname="OpenGL_accelerate", purpose="Acceleration code for PyOpenGL"), 

258 ModuleInstall('pymc', 'wheel', web="https://github.com/pymc-devs/pymc", 

259 purpose="Monte Carlo computation", usage="DATA/ML") if sys.version_info[0] >= 3 else None, 

260 ModuleInstall('autograd', 'pip', 

261 purpose="Efficiently computes derivatives of numpy code."), 

262 # The following package rely on theano (deprecated). 

263 # ModuleInstall('pymc3', 'github', "pymc-devs", web="https://github.com/pymc-devs/pymc3", 

264 # purpose="Monte Carlo computation (Python 3 only)", usage="DATA/ML") if sys.version_info[0] >= 3 else None, 

265 # ModuleInstall('pysterior', 'pip', 

266 # purpose="pysterior is a machine learning library for Python which aims to make Bayesian parametric regression and " + 

267 # "classification models accessible and easy to use. The library allows users to construct " + 

268 # "supervised learning models using an intuitive interface similar to that used by scikit-learn.", 

269 # usage="DATA/ML") if sys.version_info[0] >= 3 else None, 

270 ModuleInstall( 

271 "pyqtgraph", "pip", purpose="Scientific Graphics and GUI Library for Python, depends on PySide", usage="GUI"), 

272 ModuleInstall("deap", "pip", purpose="deep learning"), 

273 # for gensim and distributed 

274 ModuleInstall("jmespath", "pip", purpose="JSON Matching Expressions"), 

275 # for gensim 

276 ModuleInstall("bz2file", "pip", purpose="process bz2 files"), 

277 # for gensim 

278 ModuleInstall("smart_open", "pip", 

279 purpose="Utils for streaming large files (S3, HDFS, gzip, bz2...), provides the same API for many format"), 

280 ModuleInstall("httpretty", "pip", 

281 purpose="HTTP client mock for Python"), 

282 ModuleInstall("gensim", "wheel", purpose="genetic algorithm"), 

283 # ModuleInstall("pybrain", "pip"), # some issues with the code 

284 # (relative import are not well handled in version 0.3.3 

285 ModuleInstall("h5py", "wheel", usage="DATA/ML", 

286 purpose="The h5py package is a Pythonic interface to the HDF5 binary data format. " + 

287 "Trillion-Particle Simulation."), 

288 ModuleInstall("Keras-Applications", "pip", mname="keras_applications", usage="DATA/ML", 

289 purpose="Keras Applications is the applications module of the Keras deep learning " + 

290 "library. It provides model definitions and pre-trained weights for a number of " + 

291 "popular archictures, such as VGG16, ResNet50, Xception, MobileNet, and more."), 

292 ModuleInstall("Keras-Preprocessing", "pip", mname="keras_processing", usage="DATA/ML", 

293 purpose="Keras Preprocessing is the data preprocessing and data augmentation module " + 

294 "of the Keras deep learning library. It provides utilities for working with image " + 

295 "data, text data, and sequence data."), 

296 ModuleInstall("keras", "pip", purpose="deep learning", 

297 usage="DATA/ML"), 

298 ModuleInstall("keras-vis", "pip", mname="vis", usage="DATA/ML", 

299 purpose="keras-vis is a high-level toolkit for visualizing and debugging your trained keras neural net models."), 

300 # Bayesian 

301 ModuleInstall( 

302 "bayespy", "pip", purpose="bayesian modelling and computation", usage="DATA/ML"), 

303 ModuleInstall( 

304 "numexpr", "wheel", purpose="Fast numerical array expression evaluator for Python, NumPy, PyTables, pandas, bcolz and more."), 

305 # 

306 ModuleInstall("glue-core", "pip", mname="glue.core", 

307 purpose="Multidimensional data visualzation across files"), 

308 ModuleInstall("glue-vispy-viewers", "pip", mname="glue_vispy_viewers", 

309 purpose="Vispy-based viewers for Glue"), 

310 ModuleInstall("glueviz", "pip", mname="glue", 

311 purpose="ploting, Multidimensional data visualzation across files", usage="DATA/ML"), 

312 # 

313 ModuleInstall("pandas-highcharts", "pip", mname="pandas_highcharts", 

314 purpose="plotting in javascript and pandas", usage="VIZ"), 

315 # 

316 ModuleInstall( 

317 "heapdict", "pip", 

318 purpose="a heap with decrease-key and increase-key operations"), 

319 ModuleInstall( 

320 "chest", "pip", 

321 purpose="Simple on-disk dictionary"), 

322 ModuleInstall( 

323 "locket", "pip", 

324 purpose="File-based locks for Python for Linux and Windows"), 

325 ModuleInstall( 

326 "partd", "pip", 

327 purpose="Appendable key-value storage"), 

328 ModuleInstall( 

329 "dill", "pip", purpose="serialize all of python (almost), Dill extends python's pickle module for serializing " + 

330 "and de-serializing python objects to the majority of the built-in python types."), # for dask 

331 ModuleInstall("cloudpickle", "pip", 

332 purpose="Extended pickling support for Python objects") if sys.version_info[:2] >= (3, 5) else None, 

333 # parallel computation 

334 ModuleInstall( 

335 "dask", "pip", purpose="parallization of operations with dataframe", usage="DATA/ML"), 

336 ModuleInstall( 

337 "scoop", "pip", purpose="SCOOP (Scalable COncurrent Operations in Python) " + 

338 "is a distributed task module allowing concurrent parallel programming on various environments, " + 

339 "from heterogeneous grids to supercomputers", usage="DATA/ML"), 

340 # 

341 ModuleInstall( 

342 "docopt", "pip", purpose="Pythonic argument parser, that will make you smile"), 

343 ModuleInstall("pycurl", "wheel", 

344 purpose="PycURL, a interface to the libcurl library. (for grab)"), 

345 ModuleInstall("markdown2", "pip", purpose="markdown parser"), 

346 ModuleInstall( 

347 "structures", "pip", purpose="User-friendly library for creating data structures."), 

348 ModuleInstall( 

349 "tzlocal", "pip", purpose="tzinfo object for the local timezone"), 

350 ModuleInstall( 

351 "funcsigs", "pip", purpose="Python function signatures from PEP362"), 

352 ModuleInstall( 

353 "apscheduler", "pip", purpose="to schedule the execution of jobs, tasks"), 

354 # 

355 # ModuleInstall("pdfminer", "pip"), # PDF extraction (no python 3 version) 

356 # ModuleInstall("minecart", "pip"), # PDF extraction (no python 3 version) 

357 # 

358 # ModuleInstall("pygauss", "pip"), # molecule, bio-informatic, 

359 # requires PIL which is deprecated 

360 # 

361 # July 2015 

362 # 

363 ModuleInstall( 

364 "pyexecjs", "pip", mname="execjs", purpose="Run JavaScript code from Python (for pyreact)", usage="NETWORK"), 

365 ModuleInstall("pyreact", "pip", mname="react", 

366 purpose="Python bridge to JSX & the React JavaScript library. (for pyxley)", usage="NETWORK"), 

367 ModuleInstall( 

368 "pyxley", "pip", purpose="A pure-Python SNMPv1/v2c/v3 library", usage="NETWORK"), 

369 

370 # 

371 # 2015-08 

372 # 

373 ModuleInstall( 

374 "pysmi", "pip", purpose="SNMP SMI/MIB Parser (for pysnmp)"), 

375 ModuleInstall( 

376 "pysnmp", "pip", purpose="A pure-Python SNMPv1/v2c/v3 library", usage="NETWORK"), 

377 # pyinstaller does not install properly on Windows 

378 # ModuleInstall( 

379 # "pyinstaller", "pip", purpose="Converts (packages) Python programs into stand-alone 

380 # executables, under Windows, Linux, Mac OS X, AIX and Solaris."), 

381 ModuleInstall( 

382 "imageio", "pip", purpose="Library for reading and writing a wide range of image, video, " + 

383 "scientific, and volumetric data formats (for moviepy)", usage="VIDEO"), 

384 ModuleInstall( 

385 "cairocffi", "wheel2", purpose="cairocffi is a CFFI-based drop-in replacement for Pycairo, " + 

386 "a set of Python bindings and object-oriented API for cairo"), 

387 ModuleInstall("tinycss2", "pip", purpose="tinycss2 is a complete yet simple CSS parser for Python. " + 

388 "It supports the full syntax and error handling for CSS 2.1 as well as some CSS 3 modules"), 

389 ModuleInstall("cssselect2", "pip", 

390 purpose="CSS selectors for Python ElementTree"), 

391 ModuleInstall( 

392 "cairosvg", "pip", purpose="Convert your SVG files to PDF and PNG."), 

393 ModuleInstall( 

394 "gizeh", "pip", purpose="Simple Vector Graphics for Python"), 

395 ModuleInstall("imageio-ffmpeg", "pip", mname="imageio_ffmpeg", 

396 purpose="ffmpeg", usage="VIDEO"), 

397 ModuleInstall( 

398 "proglog", "pip", purpose="Progress bar."), 

399 ModuleInstall( 

400 "moviepy", "pip", purpose="Video editing with Python", usage="VIDEO"), 

401 ModuleInstall( 

402 "xgboost", "wheel", purpose="Parallelized Stochastic Gradient Descent (only available on " + 

403 "Python 3 and x64)", usage="DATA/ML") if sys.version_info[0] >= 3 and is_64bit() else None, 

404 ModuleInstall( 

405 "catboost", "pip", purpose="CatBoost is a machine learning method based on gradient boosting " + 

406 "over decision trees.", usage="DATA/ML") if sys.version_info[0] >= 3 and is_64bit() else None, 

407 ModuleInstall( 

408 "lightgbm", "pip", purpose="Parallelized Stochastic Gradient Descent (only available on " + 

409 "Python 3 and x64)", usage="DATA/ML") if sys.version_info[0] >= 3 and is_64bit() else None, 

410 ModuleInstall("pygling", "pip", 

411 purpose="to build makefile with python") if sys.version_info[0] == 2 else None, 

412 ModuleInstall("cuda4py", "pip", 

413 purpose="Python cffi CUDA bindings and helper classes"), 

414 ModuleInstall("whoosh", "pip", purpose="search engine in Python"), 

415 ModuleInstall("pymatbridge", "pip", 

416 purpose="pymatbridge is a set of python and matlab functions to allow these two systems to talk to each other"), 

417 ModuleInstall("scilab2py", "pip", 

418 purpose="Python to Scilab bridge", usage="DATA/ML"), 

419 # ModuleInstall("scilab_kernel", "pip", 

420 # purpose="A Scilab kernel for IPython", usage="JUPYTER"), 

421 # does not work 

422 ModuleInstall("pymssql", "wheel", usage="SQL", 

423 purpose="A simple database interface for Python that builds on top of FreeTDS " + 

424 "to provide a Python DB-API (PEP-249) interface to Microsoft SQL Server."), 

425 

426 ModuleInstall("PyMySQL", "pip", mname="pymysql", 

427 purpose="Pure-Python MySQL Driver", usage="SQL"), 

428 ModuleInstall("mysqlclient", "wheel", mname="MySQLdb", 

429 purpose="MySQL driver written in Python which does not depend on MySQL C client libraries and " + 

430 "implements the DB API v2.0 specification (PEP-249).", usage="SQL"), 

431 ModuleInstall("memory-profiler", "pip", mname="memory_profiler", 

432 purpose="A module for monitoring memory usage of a python program", usage="PROFILING"), 

433 ModuleInstall("pyinstrument_cext", "pip", usage="PROFILING", 

434 purpose="Pyinstrument's C extensions - reducing the overhead of statistical profilers"), 

435 ModuleInstall("pyinstrument", "pip", usage="PROFILING", 

436 purpose="A Python profiler that records the call stack of the executing code, " + 

437 "instead of just the final function in it."), 

438 ModuleInstall("gprof2dot", "pip", usage="PROFILING", 

439 purpose="This is a Python script to convert the output from many profilers into a dot graph."), 

440 ModuleInstall("vprof", "pip", usage="PROFILING", 

441 purpose="vprof is a Python package providing rich and interactive visualizations for various Python " + 

442 "program characteristics such as running time and memory usage."), 

443 ModuleInstall("snakeviz", "pip", 

444 purpose="SnakeViz is a browser based graphical viewer for the output of Python’s cProfile module.", usage="PROFILING"), 

445 ModuleInstall("httplib2", "pip", 

446 purpose="A comprehensive HTTP client library."), 

447 ModuleInstall("rsa", "pip", 

448 purpose="Pure-Python RSA implementation"), 

449 ModuleInstall("oauth2client", "pip", 

450 purpose="The oauth2client is a client library for OAuth 2.0."), 

451 ModuleInstall("uritemplate", "pip", 

452 purpose="URI templates"), 

453 ModuleInstall("jeepney", "pip", 

454 purpose="This is a low-level, pure Python DBus protocol client. It has an I/O-free core, and " + \ 

455 "integration modules for different event loops."), 

456 ModuleInstall("secretstorage", "pip", 

457 purpose="This module provides a way for securely storing passwords and other secrets."), 

458 ModuleInstall("keyring", "pip", 

459 purpose="Store and access your passwords safely."), 

460 # ModuleInstall("keyrings.alt", "pip", mname="keyrings.alt", 

461 # purpose="Alternate keyring implementations"), 

462 ModuleInstall("pyotp", "pip", 

463 purpose="PyOTP is a Python library for generating and verifying one-time passwords."), 

464 ModuleInstall("param", "pip", 

465 purpose="Declarative Python programming using Parameters."), 

466 ModuleInstall("pyviz_comms", "pip", usage="VIZ", 

467 purpose="Bidirectional communication for PyViz."), 

468 ModuleInstall("holoviews", "pip", usage="VIZ", 

469 purpose="Composable, declarative data structures for building complex visualizations easily."), 

470 ModuleInstall("geoviews", "pip", usage="VIZ", 

471 purpose="Composable, declarative data structures for building complex visualizations easily."), 

472 ModuleInstall("retrying", "pip", purpose="Retrying is an Apache 2.0 licensed general-purpose retrying library, " + 

473 "written in Python, to simplify the task of adding retry behavior to just about anything."), 

474 ModuleInstall("plotly", "pip", usage="VIZ", 

475 purpose="Plotly's Python graphing library makes interactive, publication-quality graphs online. " + 

476 "Examples of how to make line plots, " + 

477 "scatter plots, area charts, bar charts, error bars, box plots, histograms, heatmaps, subplots, multiple-axes, " + 

478 "polar charts and bubble charts."), 

479 ModuleInstall("colorlover", "pip", usage="VIZ", 

480 purpose="Color scales for IPython notebook"), 

481 ModuleInstall("TA_Lib", "wheel", mname="talib", 

482 purpose="This is a Python wrapper for TA-LIB based on Cython instead of SWIG."), 

483 ModuleInstall("cufflinks", "pip", usage="VIZ", 

484 purpose="Productivity Tools for Plotly + Pandas"), 

485 ModuleInstall("lightning-python", "pip", mname="lightning", usage="VIZ", 

486 purpose="Python client for the lightning API"), 

487 ModuleInstall("passlib", "pip", 

488 purpose="comprehensive password hashing framework supporting over 30 schemes"), 

489 ModuleInstall("plac", "pip", 

490 purpose="The smartest command line arguments parser in the world"), 

491 ModuleInstall("pyOpenSSL", "pip", mname="OpenSSL", 

492 purpose="Python wrapper module around the OpenSSL library"), 

493 ModuleInstall("w3lib", "pip", 

494 purpose="Library of web-related functions"), 

495 # ModuleInstall('python-cloudfiles-hubic', 'github', "Gu1", mname="cloudfiles", 

496 # web="https://github.com/Gu1/python-cloudfiles-hubic", 

497 # purpose="access to Hubic"), 

498 # ModuleInstall('onedrive-sdk-python', 'github', "OneDrive", mname="onedrivesdk", 

499 # web="https://github.com/Gu1/python-cloudfiles-hubic/", 

500 # purpose="access to OneDrive"), 

501 # ModuleInstall('rlpy', 'pip', usage="DATA/ML", 

502 # purpose="RLPy is a framework to conduct sequential decision making 

503 # experiments. The current focus of this project lies on 

504 # value-function-based reinforcement learning, specifically using 

505 # linear function approximators (only Python 2.7)."), 

506 ModuleInstall('wordcloud', 'wheel', usage="VIZ", 

507 purpose="A little word cloud generator in Python."), 

508 ModuleInstall('pytagcloud', 'pip', 

509 purpose="Create beautiful tag clouds as images or HTML"), 

510 

511 # distributed 

512 ModuleInstall('tblib', 'pip', 

513 purpose="Traceback fiddling library. For now allows you to pickle tracebacks and raise exceptions with pickled " + 

514 "tracebacks in different processes. This allows better error handling when running code over " + 

515 "multiple processes (imagine multiprocessing, billiard, futures, celery etc)"), 

516 ModuleInstall("zict", "pip", 

517 purpose="The dictionary / mutable mapping interface is powerful and multi-faceted."), 

518 

519 # pdf 

520 ModuleInstall("pyPdf", "github", "sdpython", usage="PDF", pipgit=True, 

521 branch="trunk", purpose="read PDF"), 

522 ModuleInstall("pdfrw", "pip", usage="PDF", 

523 purpose="PDF file reader/writer library"), 

524 # 2016-05 

525 ModuleInstall("pydub", "pip", usage="MUSIC", 

526 purpose="Pydub lets you do stuff to audio in a way that isn't stupid."), 

527 ModuleInstall("cobble", "pip", purpose="Cobble is a Python library that allows easy creation of data objects, " + 

528 "including implementations of common methods such as __eq__ and __repr__."), 

529 ModuleInstall("parsimonious", "pip", 

530 purpose="(Soon to be) the fastest pure-Python PEG parser I could muster"), 

531 ModuleInstall( 

532 "mammoth", "pip", purpose="Convert Word documents from docx to simple and clean HTML and Markdown"), 

533 # 

534 # 2016-06 

535 # 

536 # ModuleInstall("ipython-sql", "pip", purpose="RDBMS access via IPython", usgae="JUPYTER"), 

537 ModuleInstall("julia", "pip", 

538 purpose="Julia/Python bridge with IPython support", usage="DATA/ML"), 

539 ModuleInstall("octave_kernel", "pip", 

540 purpose="A Jupyter kernel for Octave."), 

541 ModuleInstall("oct2py", "pip", 

542 purpose="Python to GNU Octave bridge --> run m-files from python.", usage="DATA/ML"), 

543 ModuleInstall("pg8000", "pip", 

544 purpose="A Pure-Python PostgreSQL", usage="SQL"), 

545 ModuleInstall("PyMeta3", "pip", mname="pymeta", 

546 purpose="Pattern-matching language based on OMeta for Python 3 and 2"), 

547 # ModuleInstall("ViTables", "pip", mname="vitables", 

548 # purpose="A viewer for PyTables package"), 

549 ModuleInstall("pybars3", "pip", mname="pybar", 

550 purpose="Handlebars.js templating"), 

551 ModuleInstall("db.py", "pip", mname="db.tables", 

552 purpose="db.py is an easier way to interact with your databases. It makes it easier " + 

553 "to explore tables, columns, views, etc. " + 

554 "It puts the emphasis on user interaction, information display, and providing easy to use helper functions."), 

555 ModuleInstall("clyent", "pip", 

556 purpose="Command line client Library for windows and posix"), 

557 ModuleInstall("chalmers", "pip", 

558 purpose="Chalmers is an application that allows its users to monitor and control a number of processes on any " + 

559 "operating system (Posix and Win32 included)"), 

560 ModuleInstall("pyct", "pip", purpose="A utility package"), 

561 ModuleInstall("colorcet", "pip", 

562 purpose="colorcet is a collection of perceptually uniform colormaps for use with Python plotting programs " + 

563 "like bokeh, matplotlib, holoviews, and datashader."), 

564 ModuleInstall("datashader", "pip", usage="VIZ", 

565 purpose="Datashader is a graphics pipeline system for creating meaningful representations " + 

566 "of large amounts of data.") if sys.version_info[:2] >= (3, 5) else None, 

567 ModuleInstall("dnspython", "pip", usage="WEB", 

568 purpose="dnspython is a DNS toolkit for Python. It supports almost all record types. It can be used for queries, " + 

569 "zone transfers, and dynamic updates. It supports TSIG authenticated messages and EDNS0."), 

570 ModuleInstall("grin", "pip", usage="CLI", 

571 purpose="A grep program configured the way I like it."), 

572 ModuleInstall("ldap3", "pip", usage="WEB", 

573 purpose="ldap3 is a strictly RFC 4510 conforming LDAP V3 pure Python client library."), 

574 ModuleInstall("mpi4py", "wheel", 

575 purpose="MPI for Python"), 

576 ModuleInstall("mss", "pip", mname="mms", 

577 purpose="An ultra fast cross-platform multiple screenshots module in pure python using ctypes"), 

578 # 

579 # June 2016 

580 # 

581 ModuleInstall("pyglet", "pip", usage="GUI", 

582 purpose="a cross-platform windowing and multimedia library for Python"), 

583 ModuleInstall("geoplotlib", "pip", usage="VIZ", 

584 purpose="geoplotlib is a python toolbox for visualizing geographical data and making maps"), 

585 ModuleInstall("leather", "pip", usage="VIZ", 

586 purpose="Leather is the Python charting library for those who need charts now and don’t care if they’re perfect."), 

587 ModuleInstall("pythreejs", "pip", usage="VIZ", 

588 purpose="A Python / ThreeJS bridge utilizing the Jupyter widget infrastructure."), 

589 ModuleInstall("missingno", "pip", usage="VIZ", 

590 purpose="Messy datasets? Missing values? missingno provides a small toolset of flexible and easy-to-use " + 

591 "missing data visualizations and utilities that allows you to get a quick visual summary of the completeness " + 

592 "(or lack thereof) of your dataset."), 

593 ModuleInstall("vega", "pip", usage="VIZ", 

594 purpose="Python/Jupyter notebook module for Vega, and Vega-Lite, Polestar, and Voyager. Notebooks " + 

595 "with embedded visualizations can be viewed on github and nbviewer."), 

596 ModuleInstall("pydy", "pip", 

597 purpose="Multibody Dynamics with Python"), 

598 ModuleInstall("apache-libcloud", "pip", mname="libcloud", 

599 purpose="A standard Python library that abstracts away differences among multiple cloud provider APIs."), 

600 ModuleInstall("click-plugins", "pip", mname="click_plugins", 

601 purpose="An extension module for click to enable registering CLI commands via setuptools entry-points."), 

602 ModuleInstall("munch", "pip", 

603 purpose="A dot-accessible dictionary (a la JavaScript objects)."), 

604 ModuleInstall("cligj", "pip", 

605 purpose="Click params for commmand line interfaces to GeoJSON"), 

606 ModuleInstall("Fiona", "wheel", usage="GEO", mname="fiona", 

607 purpose="Fiona is OGR’s neat, nimble, no-nonsense API for Python programmers."), 

608 ModuleInstall("brythonmagic", "pip", 

609 purpose="Magics to use brython in Jupyter notebook."), 

610 ModuleInstall( 

611 "asteval", "pip", purpose="Safe, minimalistic evaluator of python expression using ast module"), 

612 ModuleInstall( 

613 "uncertainties", "pip", purpose="uncertainties allows calculations such as (2 +/- 0.1)*2 = 4 " + 

614 "+/- 0.2 to be performed transparently."), 

615 ModuleInstall( 

616 "lmfit", "pip", purpose="Least-Squares Minimization with Bounds and Constraints", usage="OPTIM"), 

617 # 

618 # August, September, October, December 2016 

619 # 

620 ModuleInstall('QInfer', 'pip', mname="qinfer", usage="DATA/ML", 

621 purpose="QInfer is a library using Bayesian sequential Monte Carlo for quantum parameter estimation."), 

622 ModuleInstall('pscript', 'pip', purpose="for flexx"), 

623 ModuleInstall('webruntime', 'pip', purpose="for flexx"), 

624 ModuleInstall('dialite', 'pip', purpose="for flexx"), 

625 ModuleInstall('flexx', 'pip', usage="GUI", 

626 purpose="Flexx is a pure Python toolkit for creating graphical user interfaces (GUI's), " + 

627 "that uses web technology for its rendering. Apps are written purely in Python; Flexx' " + 

628 "transpiler generates the necessary JavaScript on the fly."), 

629 ModuleInstall('pypng', 'pip', 

630 purpose="Pure Python PNG image encoder/decoder"), 

631 ModuleInstall('colormath', 'pip', 

632 purpose="Color math and conversion library."), 

633 ModuleInstall('arrow', 'pip', 

634 purpose="Better dates and times for Python"), 

635 ModuleInstall('custom_inherit', 'pip', 

636 purpose="A Python package that provides tools for inheriting docstrings in customizable ways."), 

637 ModuleInstall('toyplot', 'pip', usage="VIZ", 

638 purpose="The kid-sized plotting toolkit for Python with grownup-sized goals."), 

639 ModuleInstall('images2gif', 'pip', 

640 purpose="Create a GIF from a list of images."), 

641 ModuleInstall('hypothesis', 'pip', 

642 purpose="Hypothesis is an advanced testing library for Python. It lets you write tests which are parametrized " + 

643 "by a source of examples, and then generates simple and comprehensible examples that make your tests fail. " + 

644 "This lets you find more bugs in your code with less work."), 

645 ModuleInstall('monotonic', 'pip', 

646 purpose="This module provides a monotonic() function which returns the value (in fractional seconds) " + 

647 "of a clock which never goes backwards. " + 

648 "It is compatible with Python 2 and Python 3."), 

649 ModuleInstall('fasteners', 'pip', 

650 purpose="A python package that provides useful locks."), 

651 ModuleInstall('asciitree', 'pip', 

652 purpose="Draws ASCII trees."), 

653 ModuleInstall('numcodecs', 'wheel', 

654 purpose="Numcodecs is a Python package providing buffer compression and transformation codecs for use " + 

655 "in data storage and communication applications."), 

656 ModuleInstall('zarr', 'pip', 

657 purpose="A minimal implementation of chunked, compressed, N-dimensional arrays for Python."), 

658 ModuleInstall('rx', 'pip', 

659 purpose="Reactive Extensions (Rx) for Python (LINQ)"), 

660 ModuleInstall('PySocks', 'pip', mname="socks", 

661 purpose="A semi-actively maintained SocksiPy fork. Contains many improvements to the original."), 

662 ModuleInstall('pympler', 'pip', 

663 purpose="Pympler is a development tool to measure, monitor and analyze the memory behavior of Python " + 

664 "objects in a running Python application."), 

665 ModuleInstall('fbpca', 'pip', 

666 purpose="Functions for principal component analysis (PCA) and accuracy checks."), 

667 ModuleInstall('prince', 'pip', 

668 purpose="Prince is a factor analysis library for datasets that fit in memory."), 

669 ModuleInstall('pivottablejs', 'pip', 

670 purpose="PivotTable.js integration for Jupyter/IPython Notebook."), 

671 # 

672 # January 2017 

673 # 

674 ModuleInstall('pystan', 'pip', usage="DATA/ML", 

675 purpose="PyStan provides an interface to Stan, a package for Bayesian inference using " + 

676 "the No-U-Turn sampler, a variant of Hamiltonian Monte Carlo."), 

677 ModuleInstall('ephem', 'pip', purpose="for fbprophet"), 

678 ModuleInstall('convertdate', 'pip', purpose="for fbprophet"), 

679 ModuleInstall('holidays', 'pip', purpose="for fbprophet"), 

680 ModuleInstall('lunardate', 'pip', purpose="for fbprophet"), 

681 ModuleInstall('fbprophet', 'pip', usage="DATA/ML", 

682 purpose="Prophet is a procedure for forecasting time series data. It is based on an additive " + 

683 "model where non-linear trends are fit with yearly and weekly seasonality, plus holidays. " + 

684 "It works best with daily periodicity data with at least one year of historical data. " + 

685 "Prophet is robust to missing data, shifts in the trend, and large outliers."), 

686 ModuleInstall('wikipedia', 'pip', 

687 purpose="Wikipedia API for Python"), 

688 ModuleInstall('validate_email', 'pip', 

689 purpose="Validate_email verify if an email address is valid and really exists."), 

690 ModuleInstall('simhash', 'pip', 

691 purpose="A Python implementation of Simhash Algorithm"), 

692 ModuleInstall('wptools', 'pip', 

693 purpose="Wikipedia tools (for Humans)"), 

694 # 

695 # June 2017 

696 # 

697 ModuleInstall('pytest_runner', 'pip', 

698 purpose="Setup scripts can use pytest-runner to add setup.py test support for pytest runner."), 

699 ModuleInstall('fastparquet', 'wheel', 

700 purpose="fastparquet is a python implementation of the parquet format, aiming integrate " + 

701 "into python-based big data work-flows."), 

702 ModuleInstall('citeproc-py', 'pip', mname="citeproc_py", 

703 purpose="citeproc-py is a CSL processor for Python. It aims to implement the CSL 1.0.1 specification. " + 

704 "citeproc-py can output styled citations and bibliographies in a number of different output formats. " + 

705 "Currently supported are plain text, reStructuredText and HTML. Other formats can be added easily."), 

706 ModuleInstall('duecredit', 'pip', 

707 purpose="Publications (and donations) tracer"), 

708 # 

709 # September 2017 

710 # 

711 ModuleInstall('Brotli', 'wheel', mname="brotli", 

712 purpose="Brotli is a generic-purpose lossless compression algorithm that compresses data using a " + 

713 "combination of a modern variant of the LZ77 algorithm, Huffman coding and 2nd order context modeling, " + 

714 "with a compression ratio comparable to the best currently available general-purpose compression methods. " + 

715 "It is similar in speed with deflate but offers more dense compression."), 

716 ModuleInstall('fast-histogram', 'wheel2', mname="fast_histogram", 

717 purpose="Mizani is a scales package for graphics. It is written in Python and is " + 

718 "based on Hadley Wickham's Scales."), 

719 ModuleInstall('mizani', 'pip', 

720 purpose="Mizani is a scales package for graphics. It is written in Python and is " + 

721 "based on Hadley Wickham's Scales."), 

722 ModuleInstall('mpl-scatter-density', 'pip', mname="mpl_scatter_density", 

723 purpose="Matplotlib helpers to make density scatter plots"), 

724 ModuleInstall('pybind11', 'pip', usage="C++", 

725 purpose="pybind11 is a lightweight header-only library that exposes C++ types in Python and vice versa, " + 

726 "mainly to create Python bindings of existing C++ code."), 

727 ModuleInstall('mypy_extensions', 'pip', purpose="for mypy"), 

728 ModuleInstall('mypy', 'pip', 

729 purpose="Mypy is an experimental optional static type checker for Python that aims to combine the benefits of " + 

730 "dynamic (or 'duck') typing and static typing."), 

731 ModuleInstall('pypandoc', 'pip', 

732 purpose="Pypandoc provides a thin wrapper for pandoc, a universal document converter."), 

733 ModuleInstall('pocket', 'pip', 

734 purpose="Access to pocket API."), 

735 # 

736 # November 2017 

737 # 

738 ModuleInstall('seasonal', 'pip', purpose="timeseries", usage="ML"), 

739 # 

740 # December 2017 

741 # 

742 ModuleInstall('gdown', 'pip', 

743 purpose="Google Drive direct download of big files."), 

744 ModuleInstall('pytube3', 'pip', 

745 purpose="play with youtube videos"), 

746 # 

747 # Mars, Avril 2018 

748 # 

749 ModuleInstall('pyjsparser', 'pip', 

750 purpose="Fast javascript parser (based on esprima.js)"), 

751 ModuleInstall('Js2Py', 'pip', mname="js2py", 

752 purpose="JavaScript to Python Translator & JavaScript interpreter written in 100% pure Python."), 

753 ModuleInstall('x86cpu', 'wheel', purpose="Uses cpuid instruction to get information about CPU. " + 

754 "Queries OS as well as cpuid to see if the OS / CPU supports AVX instructions."), 

755 ModuleInstall('pythonnet', 'wheel', mname="clr", 

756 purpose="Python binding for C#"), 

757 # 

758 # July 2018 

759 # 

760 ModuleInstall('lml', 'pip', 

761 purpose="lml seamlessly finds the lml based plugins from your current python " + 

762 "environment but loads your plugins on demand. It is designed to support plugins " + 

763 "that have external dependencies, especially bulky and/or memory hungry ones. " + 

764 "lml provides the plugin management system only and the plugin interface is on your shoulder."), 

765 ModuleInstall('macropy3', 'pip', 

766 purpose='MacroPy is an implementation of Syntactic Macros in the Python Programming ' + 

767 'Language. MacroPy provides a mechanism for user-defined functions (macros) to perform ' + 

768 'transformations on the abstract syntax tree (AST) of a Python program at import time. This ' + 

769 'is an easy way to enhance the semantics of a Python program in ways which are otherwise ' + 

770 'impossible, for example providing an extremely concise way of declaring classes.'), 

771 ModuleInstall('dukpy', 'pip', 

772 purpose='DukPy is a simple javascript interpreter for Python built on top of duktape ' + 

773 'engine without any external dependency. It comes with a bunch of common transpilers ' + 

774 'built-in for convenience.'), 

775 ModuleInstall('javascripthon', 'pip', 

776 purpose='a Python 3 to ES6 JavaScript translator'), 

777 ModuleInstall('pyecharts', 'pip', 

778 purpose='pyecharts is a library to generate charts using Echarts. It simply provides ' + 

779 'the interface of 28+ kinds of charts between Echarts and Python.'), 

780 ModuleInstall('pyecharts-javascripthon', 'pip', mname='pyecharts_javascripthon', 

781 purpose='pyecharts-javascripthon helps translate Python functions into javascript ones. ' + 

782 'It uses javascripthon and dukpy to blend Python codes into javascript runtime. It supports ' + 

783 'python 2.7, 3.4, 3.5 and 3.6. It works on Linux, MacOS and Windows platforms.'), 

784 ModuleInstall('pyecharts-snapshot', 'pip', mname='pyecharts_snapshot', 

785 purpose='pyecharts-snapshot renders the output of pyecharts as a png, jpeg, gif, svg image ' + 

786 'or a pdf file at command line or in your code.'), 

787 ModuleInstall('jupyter-echarts-pypkg', 'pip', mname='jupyter_echarts_pypkg', 

788 purpose='The project packages jupyter-echarts and distributes it via pypi.'), 

789 ModuleInstall('yahoo-historical', 'pip', mname="yahoo_historical", 

790 purpose='Python module to get stock data from Yahoo! Finance'), 

791 # 

792 # October 2019 

793 # 

794 ModuleInstall('wsproto', 'pip', 

795 purpose='Pure Python, pure state-machine WebSocket implementation.'), 

796 ModuleInstall('h11', 'pip', 

797 purpose='This is a little HTTP/1.1 library written from scratch in Python, ' 

798 'heavily inspired by hyper-h2.'), 

799 ModuleInstall('httptools', 'pip', 

800 purpose='httptools is a Python binding for nodejs HTTP parser. ' 

801 'It\'s still in a very early development stage, expect ' 

802 'APIs to break.'), 

803 ModuleInstall('hypercorn', 'pip', 

804 purpose='Hypercorn is an ASGI web server based on the sans-io hyper, h11, ' 

805 'h2, and wsproto libraries and inspired by Gunicorn.'), 

806 ModuleInstall('priority', 'pip', 

807 purpose='Priority is a pure-Python implementation of the priority logic ' 

808 'for HTTP/2.'), 

809 ModuleInstall('starlette', 'pip', 

810 purpose='Starlette is a lightweight ASGI framework/toolkit, which is ideal ' 

811 'for building high performance asyncio services.'), 

812 ModuleInstall('uvicorn', 'pip', 

813 purpose='Uvicorn is a lightning-fast ASGI server implementation, ' 

814 'using uvloop and httptools.'), 

815 ModuleInstall('websockets', 'pip', 

816 purpose='websockets is a library for building WebSocket servers and ' 

817 'clients in Python with a focus on correctness and simplicity.'), 

818 # 

819 # December 2019 

820 # 

821 ModuleInstall('py-spy', 'pip', 

822 purpose='profiler implemented in rust, works like a C++ profiler'), 

823 ModuleInstall('pydicom', 'pip', 

824 purpose='pydicom is a pure python package for working with DICOM files. ' 

825 'It was made for inspecting and modifying DICOM data in an easy ' 

826 '"pythonic" way. The modifications can be written again to a new ' 

827 'file.'), 

828 ] 

829 

830 return [_ for _ in mod if _ is not None]