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
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("parameterized", "pip",
48 purpose="parameterized: For everything. Parameterized testing "
49 "for nose, parameterized testing for py.test, parameterized testing for unittest."),
50 ModuleInstall(
51 "blist", "wheel",
52 purpose="a list-like type with better asymptotic performance and similar performance on small lists"),
53 ModuleInstall(
54 "blz", "wheel",
55 purpose="blz: a compressed data container"),
56 ModuleInstall("pamela", "pip",
57 purpose="An interface to the Pluggable Authentication Modules (PAM) " +
58 "library on linux, written in pure python (using ctypes)")
59 if not sys.platform.startswith("win") else None,
60 ModuleInstall("async_generator", "pip", purpose="for jupyterhup"),
61 ModuleInstall("python_oauth2", "pip", purpose="for jupyterhup"),
62 ModuleInstall(
63 "jupyterhub", "pip", purpose="JupyterHub: A multi-user server for Jupyter notebooks", usage="JUPYTER")
64 if not sys.platform.startswith("win") else None,
65 ModuleInstall('rpy2', 'wheel', purpose="interact with R (R_HOME needs to be set up on Linux)",
66 usage="DATA/ML"),
67 ModuleInstall('python-pptx', 'pip', mname="pptx",
68 purpose="read/write PowerPoint presentation"),
69 ModuleInstall(
70 'python-docx', 'pip', mname="docx", purpose="read/write Word document"),
71 # ModuleInstall('flasksphinx', 'pip', purpose="serves Sphinx
72 # documentation through a Flask server"), # issue with Python 3
73 ModuleInstall(
74 'cffi', 'wheel', usage="C++", purpose="Foreign Function Interface for Python calling C code."),
75 ModuleInstall(
76 'datashape', 'pip', purpose="A data description language."),
77 ModuleInstall(
78 'ordereddict', 'pip', purpose="Python's collections.OrderedDict") if sys.version_info[0] == 2 else None,
79 ModuleInstall(
80 'cyordereddict', 'wheel', purpose="Cython implementation of Python's collections.OrderedDict"),
81 ModuleInstall('dynd', 'wheel',
82 purpose="DyND-Python, a component of the Blaze project, " +
83 "is the Python exposure of the DyND dynamic multi-dimensional array library.")
84 if sys.version_info[0] >= 3 else None,
85 ModuleInstall("mpmath", "pip",
86 purpose="mpmath is a free (BSD licensed) Python library for real and complex " +
87 "floating-point arithmetic with arbitrary precision."),
88 ModuleInstall(
89 'sympy', 'pip', purpose="SymPy is a Python library for symbolic mathematics."),
90 ModuleInstall('gmpy2', 'wheel',
91 purpose="big real numbers (issue on Linux and Anaconda)"),
92 ModuleInstall('llvmlite', 'wheel',
93 purpose="lightweight wrapper around basic LLVM functionality, check issue " +
94 "https://github.com/cmderdev/cmder/issues/490 for missing api-ms-win-crt-runtime-l1-1-0.dll"),
95 ModuleInstall('numba', 'wheel', usage="C++",
96 purpose="Numba is an Open Source NumPy-aware optimizing compiler for Python sponsored by Continuum Analytics, Inc."),
97 ModuleInstall('scikit-image', 'wheel', mname='skimage',
98 purpose="scikit-image is a collection of algorithms for image processing."),
99 ModuleInstall(
100 'cvxopt', 'wheel', purpose="linear, quadratique optimization", usage="OPTIM"),
101 ModuleInstall(
102 'PyWavelets', 'wheel', mname='pywt', purpose="wavelets computation", usage="DATA/ML"),
103 ModuleInstall('pyclustering', 'pip',
104 purpose="many kinds of clustering (Optics, DBScan, x-means, ...)", usage="DATA/ML"),
105 ModuleInstall(
106 'pycosat', 'wheel', purpose="PicoSAT is a popular SAT solver written by Armin Biere in pure C."),
107 ModuleInstall('pyshp', 'pip', mname='shapefile',
108 purpose="Pure Python read/write support for ESRI Shapefile format"),
109 ModuleInstall('Shapely', 'wheel', mname='shapely',
110 purpose="Manipulation and analysis of geometric objects in the Cartesian plane."),
111 ModuleInstall('descartes', 'pip',
112 purpose="Use Shapely or GeoJSON-like geometric objects as matplotlib paths and patches"),
113 ModuleInstall('geopandas', 'pip',
114 purpose="GeoPandas is an open source project to make working with geospatial data in python easier. "),
115 ModuleInstall(
116 'vispy', 'pip', purpose="Vispy is a high-performance interactive 2D/3D data visualization library."),
117 ModuleInstall(
118 'selenium', 'pip', purpose="Python wrapper for Selenium", usage="NETWORK"),
119 ModuleInstall(
120 'splinter', 'pip', purpose="browser abstraction for web acceptance testing", usage="NETWORK"),
121 ModuleInstall(
122 'pygame', 'wheel', purpose="GUI, interface for games (needs to be installed from www.pygame.org on Linux)", usage="GUI"),
123 ModuleInstall(
124 'Kivy', 'wheel', mname='kivy', usage="GUI",
125 purpose="GUI, interface for games, mobile (use sudo apt-get install python3-kivy on Linux)"),
126 ModuleInstall('kivy-garden', 'pip', mname='kivy.garden',
127 purpose="Garden tool for kivy flowers.", usage="GUI"),
128 ModuleInstall(
129 'py4j', 'pip', purpose="Enables Python programs to dynamically access arbitrary Java objects"),
130 ModuleInstall(
131 'lockfile', 'pip', purpose="Platform-independent file locking module"),
132 ModuleInstall('python-daemon', 'pip', mname="daemon",
133 purpose="Library to implement a well-behaved Unix daemon process (for luigi)"),
134 ModuleInstall('cached_property', 'pip',
135 purpose="A decorator for caching properties in classes (for luigi)"),
136 ModuleInstall('luigi', 'pip',
137 purpose="workflows, data workflows", usage="WORKFLOW"),
138 #
139 ModuleInstall('setproctitle', 'wheel',
140 purpose="A Python module to customize the process title"),
141 # thrift only works only for Python 2.7
142 ModuleInstall(
143 'ply', 'pip', purpose="Python Lex & Yacc (for thrifty)"),
144 ModuleInstall(
145 'thrift', 'pip', purpose="Python bindings for the Apache Thrift RPC system"),
146 ModuleInstall(
147 'thriftpy', 'pip', purpose="pure python implemention of Apache Thrift."),
148 # ModuleInstall('airflow', 'pip'), # does not work on Python 3
149 ModuleInstall(
150 'branca', 'pip', purpose="", usage="VIZ"),
151 ModuleInstall('folium', 'pip', usage="VIZ",
152 purpose="This library is a spinoff from folium, that would host the " +
153 "non-map-specific features. It may become a HTML+JS generation " +
154 "library in the future."),
155 ModuleInstall(
156 'osmapi', 'pip', purpose="Python wrapper for the OSM API", usage="VIZ"),
157 ModuleInstall('geographiclib', 'pip',
158 purpose="This implements algorithms for geodesics (Karney, 2013) for solving " +
159 "the direct and inverse problems for an ellipsoid of revolution."),
160 ModuleInstall('geopy', 'pip',
161 purpose="Python Geocoding Toolbox", usage="VIZ"),
162 ModuleInstall('pyproj', 'wheel',
163 purpose="python interface to PROJ4 library for cartographic transformations " +
164 "https://jswhit.github.io/pyproj, needed by cartopy", usage="VIZ"),
165 ModuleInstall('geojson', 'pip',
166 purpose="Functions for encoding and decoding GeoJSON formatted data"),
167 # Deprecated
168 # ModuleInstall('basemap', 'wheel', mname='mpl_toolkits.basemap',
169 # purpose="maps extension for matplotlib", usage="VIZ"),
170 ModuleInstall('Cartopy', 'wheel', mname="cartopy",
171 purpose="Cartopy is a Python package designed to make drawing maps for data analysis " +
172 "and visualisation as easy as possible (issue on Linux and Anaconda)", usage="VIZ"),
173 # the module cartopy requires GEOS https://trac.osgeo.org/geos/
174 #
175 ModuleInstall("python3-linkedin", "pip", mname="linkedin",
176 purpose="Python Interface to the LinkedIn API"),
177 # access to linkedin
178 ModuleInstall(
179 "oauthlib", "pip", purpose="A generic, spec-compliant, thorough implementation of the OAuth request-signing logic"),
180 ModuleInstall("requests-oauthlib", "pip", mname="requests_oauthlib",
181 purpose="OAuthlib authentication support for Requests."),
182 ModuleInstall("antlr4-python3-runtime", "pip",
183 mname="antlr4", purpose="antlr4 runtime, grammar parser"),
184 # ModuleInstall("unqlite", "pip"), #
185 # key/value store (NoSQL)
186 ModuleInstall("pycontracts", "pip", mname="contracts", # version="1.7.6",
187 purpose="PyContracts is a Python package that allows to declare constraints on function parameters " +
188 "and return values, setup for version 1.7.7 is bugged"),
189 #
190 ModuleInstall(
191 "ecdsa", "pip", purpose="ECDSA cryptographic signature library (pure python)"),
192 ModuleInstall("winrandom", "wheel",
193 purpose="This module gives direct access to Windows Cryptographic API CryptGetRandom() function, " +
194 "which is cryptographically strong pseudo-random number generator (PRNG) on Windows:"),
195 ModuleInstall("pycrypto", "wheel2", mname="Crypto",
196 purpose="Cryptographic modules for Python (not available on x64 and Python 3)"),
197 ModuleInstall("pycryptodomex", "pip", mname="Cryptodome",
198 purpose="Cryptographic modules for Python (not available on x64 and Python 3)"),
199 ModuleInstall("xxhash", "wheel",
200 purpose="xxHash is an Extremely fast Hash algorithm, running at RAM speed limits."),
201 ModuleInstall("cryptography", "pip",
202 purpose="cryptography is a package which provides cryptographic recipes and primitives to Python developers."),
203 ModuleInstall(
204 "pyasn1", "pip", purpose="ASN.1 types and codecs (for pysnmp)"),
205 ModuleInstall("asn1crypto", "pip",
206 purpose="Fast ASN.1 parser and serializer with definitions for private keys, " +
207 "public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12, PKCS#5, X.509 and TSP"),
208 ModuleInstall("PyNaCl", "pip", mname="nacl",
209 purpose="Python binding to the Networking and Cryptography (NaCl) library", usage="NETWORK"),
210 ModuleInstall("bcrypt", "pip",
211 purpose="Modern password hashing for your software and your servers"),
212 ModuleInstall("paramiko", "pip",
213 purpose="SSH2 protocol library", usage="NETWORK"),
214 #
215 #
216 # 2015-02-05
217 #
218 ModuleInstall("autopy3", "wheel",
219 purpose="A simple, cross-platform GUI automation toolkit for Python 3 " +
220 "(issue on Linux and Anaconda)") if sys.version_info[0] >= 3 else None, # simulate events
221 # large double
222 ModuleInstall("bigfloat", "wheel",
223 purpose="big float (issue with Linux and Anaconda)"),
224 # convex optimization, depends on CVXOPT
225 ModuleInstall(
226 "scs", "wheel", purpose="Solves convex cone programs via operator splitting.", usage="OPTIM"),
227 ModuleInstall(
228 "ecos", "wheel", purpose="ECOS is a numerical software for solving convex second-order cone programs (SOCPs)", usage="OPTIM"),
229 ModuleInstall(
230 "CVXcanon", "wheel", purpose="A low-level library to perform the matrix building step in cvxpy, " +
231 "a convex optimization modeling software.", usage="OPTIM") if sys.version_info[:2] >= (3, 5) else None,
232 ModuleInstall(
233 "fastcache", "wheel", purpose="C implementation of Python 3 lru_cache for Python."),
234 ModuleInstall(
235 "multiprocess", "wheel", purpose="better multiprocessing and multithreading in python"),
236 ModuleInstall("osqp", "wheel",
237 purpose="The OSQP (Operator Splitting Quadratic Program) solver is a numerical optimization package for solving " +
238 "quadratic problems") if sys.version_info[:2] >= (3, 5) else None,
239 ModuleInstall("cvxpy", "pip", usage="OPTIM",
240 purpose="linear, quadratic optimization, depends on cvxopt") if sys.version_info[:2] >= (3, 5) else None,
241 # to install packages with conda
242 ModuleInstall("libLAS", "wheel", mname="liblas",
243 purpose="libLAS is a C/C++ library for reading and writing the very common LAS LiDAR format."),
244 ModuleInstall(
245 "liblinear", "wheel", purpose="A Library for Large Linear Classification"),
246 ModuleInstall("marisa_trie", "wheel",
247 purpose="Static memory-efficient & fast Trie-like structures for Python (based on marisa-trie C++ library)"),
248 ModuleInstall(
249 "mlpy", "wheel", purpose="mlpy is a Python module for Machine Learning built on top of NumPy/SciPy, has wavelets"),
250 ModuleInstall(
251 "pygit2", "wheel", purpose="Pygit2 is a set of Python bindings to the libgit2 shared library, " +
252 "libgit2 implements the core of Git."),
253 ModuleInstall(
254 "pymongo", "wheel", purpose="Python wrapper for MongoDB", usage="NoSQL"),
255 ModuleInstall("psycopg2", "wheel",
256 purpose="Python-PostgreSQL Database Adapter"),
257 ModuleInstall(
258 "PyOpenGL", "wheel", mname="OpenGL", purpose="use OpenGL in Python"),
259 ModuleInstall(
260 "PyOpenGL_accelerate", "wheel", mname="OpenGL_accelerate", purpose="Acceleration code for PyOpenGL"),
261 ModuleInstall('pymc', 'wheel', web="https://github.com/pymc-devs/pymc",
262 purpose="Monte Carlo computation", usage="DATA/ML") if sys.version_info[0] >= 3 else None,
263 ModuleInstall('autograd', 'pip',
264 purpose="Efficiently computes derivatives of numpy code."),
265 # The following package rely on theano (deprecated).
266 # ModuleInstall('pymc3', 'github', "pymc-devs", web="https://github.com/pymc-devs/pymc3",
267 # purpose="Monte Carlo computation (Python 3 only)", usage="DATA/ML") if sys.version_info[0] >= 3 else None,
268 # ModuleInstall('pysterior', 'pip',
269 # purpose="pysterior is a machine learning library for Python which aims to make Bayesian parametric regression and " +
270 # "classification models accessible and easy to use. The library allows users to construct " +
271 # "supervised learning models using an intuitive interface similar to that used by scikit-learn.",
272 # usage="DATA/ML") if sys.version_info[0] >= 3 else None,
273 ModuleInstall(
274 "pyqtgraph", "pip", purpose="Scientific Graphics and GUI Library for Python, depends on PySide", usage="GUI"),
275 ModuleInstall("deap", "pip", purpose="deep learning"),
276 # for gensim and distributed
277 ModuleInstall("jmespath", "pip", purpose="JSON Matching Expressions"),
278 # for gensim
279 ModuleInstall("bz2file", "pip", purpose="process bz2 files"),
280 # for gensim
281 ModuleInstall("smart_open", "pip",
282 purpose="Utils for streaming large files (S3, HDFS, gzip, bz2...), provides the same API for many format"),
283 ModuleInstall("httpretty", "pip",
284 purpose="HTTP client mock for Python"),
285 ModuleInstall("gensim", "wheel", purpose="genetic algorithm"),
286 # ModuleInstall("pybrain", "pip"), # some issues with the code
287 # (relative import are not well handled in version 0.3.3
288 ModuleInstall("h5py", "wheel", usage="DATA/ML",
289 purpose="The h5py package is a Pythonic interface to the HDF5 binary data format. " +
290 "Trillion-Particle Simulation."),
291 ModuleInstall("Keras-Applications", "pip", mname="keras_applications", usage="DATA/ML",
292 purpose="Keras Applications is the applications module of the Keras deep learning " +
293 "library. It provides model definitions and pre-trained weights for a number of " +
294 "popular archictures, such as VGG16, ResNet50, Xception, MobileNet, and more."),
295 ModuleInstall("Keras-Preprocessing", "pip", mname="keras_processing", usage="DATA/ML",
296 purpose="Keras Preprocessing is the data preprocessing and data augmentation module " +
297 "of the Keras deep learning library. It provides utilities for working with image " +
298 "data, text data, and sequence data."),
299 ModuleInstall("keras", "pip", purpose="deep learning",
300 usage="DATA/ML"),
301 ModuleInstall("keras-vis", "pip", mname="vis", usage="DATA/ML",
302 purpose="keras-vis is a high-level toolkit for visualizing and debugging your trained keras neural net models."),
303 # Bayesian
304 ModuleInstall(
305 "bayespy", "pip", purpose="bayesian modelling and computation", usage="DATA/ML"),
306 ModuleInstall(
307 "numexpr", "wheel", purpose="Fast numerical array expression evaluator for Python, NumPy, PyTables, pandas and more."),
308 #
309 ModuleInstall("glue-core", "pip", mname="glue.core",
310 purpose="Multidimensional data visualzation across files"),
311 ModuleInstall("glue-vispy-viewers", "pip", mname="glue_vispy_viewers",
312 purpose="Vispy-based viewers for Glue"),
313 ModuleInstall("glueviz", "pip", mname="glue",
314 purpose="ploting, Multidimensional data visualzation across files", usage="DATA/ML"),
315 #
316 ModuleInstall("pandas-highcharts", "pip", mname="pandas_highcharts",
317 purpose="plotting in javascript and pandas", usage="VIZ"),
318 #
319 ModuleInstall(
320 "heapdict", "pip",
321 purpose="a heap with decrease-key and increase-key operations"),
322 ModuleInstall(
323 "chest", "pip",
324 purpose="Simple on-disk dictionary"),
325 ModuleInstall(
326 "locket", "pip",
327 purpose="File-based locks for Python for Linux and Windows"),
328 ModuleInstall(
329 "partd", "pip",
330 purpose="Appendable key-value storage"),
331 ModuleInstall(
332 "dill", "pip", purpose="serialize all of python (almost), Dill extends python's pickle module for serializing " +
333 "and de-serializing python objects to the majority of the built-in python types."), # for dask
334 ModuleInstall("cloudpickle", "pip",
335 purpose="Extended pickling support for Python objects") if sys.version_info[:2] >= (3, 5) else None,
336 # parallel computation
337 ModuleInstall(
338 "dask", "pip", purpose="parallization of operations with dataframe", usage="DATA/ML"),
339 ModuleInstall(
340 "scoop", "pip", purpose="SCOOP (Scalable COncurrent Operations in Python) " +
341 "is a distributed task module allowing concurrent parallel programming on various environments, " +
342 "from heterogeneous grids to supercomputers", usage="DATA/ML"),
343 #
344 ModuleInstall(
345 "docopt", "pip", purpose="Pythonic argument parser, that will make you smile"),
346 ModuleInstall("pycurl", "wheel",
347 purpose="PycURL, a interface to the libcurl library. (for grab)"),
348 ModuleInstall("markdown2", "pip", purpose="markdown parser"),
349 ModuleInstall(
350 "structures", "pip", purpose="User-friendly library for creating data structures."),
351 ModuleInstall(
352 "tzlocal", "pip", purpose="tzinfo object for the local timezone"),
353 ModuleInstall(
354 "funcsigs", "pip", purpose="Python function signatures from PEP362"),
355 ModuleInstall(
356 "apscheduler", "pip", purpose="to schedule the execution of jobs, tasks"),
357 #
358 # ModuleInstall("pdfminer", "pip"), # PDF extraction (no python 3 version)
359 # ModuleInstall("minecart", "pip"), # PDF extraction (no python 3 version)
360 #
361 # ModuleInstall("pygauss", "pip"), # molecule, bio-informatic,
362 # requires PIL which is deprecated
363 #
364 # July 2015
365 #
366 ModuleInstall(
367 "pyexecjs", "pip", mname="execjs", purpose="Run JavaScript code from Python (for pyreact)", usage="NETWORK"),
368 ModuleInstall("pyreact", "pip", mname="react",
369 purpose="Python bridge to JSX & the React JavaScript library. (for pyxley)", usage="NETWORK"),
370 ModuleInstall(
371 "pyxley", "pip", purpose="A pure-Python SNMPv1/v2c/v3 library", usage="NETWORK"),
373 #
374 # 2015-08
375 #
376 ModuleInstall(
377 "pysmi", "pip", purpose="SNMP SMI/MIB Parser (for pysnmp)"),
378 ModuleInstall(
379 "pysnmp", "pip", purpose="A pure-Python SNMPv1/v2c/v3 library", usage="NETWORK"),
380 # pyinstaller does not install properly on Windows
381 # ModuleInstall(
382 # "pyinstaller", "pip", purpose="Converts (packages) Python programs into stand-alone
383 # executables, under Windows, Linux, Mac OS X, AIX and Solaris."),
384 ModuleInstall(
385 "imageio", "pip", purpose="Library for reading and writing a wide range of image, video, " +
386 "scientific, and volumetric data formats (for moviepy)", usage="VIDEO"),
387 ModuleInstall(
388 "cairocffi", "wheel2", purpose="cairocffi is a CFFI-based drop-in replacement for Pycairo, " +
389 "a set of Python bindings and object-oriented API for cairo"),
390 ModuleInstall("tinycss2", "pip", purpose="tinycss2 is a complete yet simple CSS parser for Python. " +
391 "It supports the full syntax and error handling for CSS 2.1 as well as some CSS 3 modules"),
392 ModuleInstall("cssselect2", "pip",
393 purpose="CSS selectors for Python ElementTree"),
394 ModuleInstall(
395 "cairosvg", "pip", purpose="Convert your SVG files to PDF and PNG."),
396 ModuleInstall(
397 "gizeh", "pip", purpose="Simple Vector Graphics for Python"),
398 ModuleInstall("imageio-ffmpeg", "pip", mname="imageio_ffmpeg",
399 purpose="ffmpeg", usage="VIDEO"),
400 ModuleInstall(
401 "proglog", "pip", purpose="Progress bar."),
402 ModuleInstall(
403 "moviepy", "pip", purpose="Video editing with Python", usage="VIDEO"),
404 ModuleInstall(
405 "xgboost", "wheel", purpose="Parallelized Stochastic Gradient Descent (only available on " +
406 "Python 3 and x64)", usage="DATA/ML") if sys.version_info[0] >= 3 and is_64bit() else None,
407 ModuleInstall(
408 "catboost", "pip", purpose="CatBoost is a machine learning method based on gradient boosting " +
409 "over decision trees.", usage="DATA/ML") if sys.version_info[0] >= 3 and is_64bit() else None,
410 ModuleInstall(
411 "lightgbm", "pip", purpose="Parallelized Stochastic Gradient Descent (only available on " +
412 "Python 3 and x64)", usage="DATA/ML") if sys.version_info[0] >= 3 and is_64bit() else None,
413 ModuleInstall("pygling", "pip",
414 purpose="to build makefile with python") if sys.version_info[0] == 2 else None,
415 ModuleInstall("cuda4py", "pip",
416 purpose="Python cffi CUDA bindings and helper classes"),
417 ModuleInstall("whoosh", "pip", purpose="search engine in Python"),
418 ModuleInstall("pymatbridge", "pip",
419 purpose="pymatbridge is a set of python and matlab functions to allow these two systems to talk to each other"),
420 ModuleInstall("scilab2py", "pip",
421 purpose="Python to Scilab bridge", usage="DATA/ML"),
422 # ModuleInstall("scilab_kernel", "pip",
423 # purpose="A Scilab kernel for IPython", usage="JUPYTER"),
424 # does not work
425 ModuleInstall("pymssql", "wheel", usage="SQL",
426 purpose="A simple database interface for Python that builds on top of FreeTDS " +
427 "to provide a Python DB-API (PEP-249) interface to Microsoft SQL Server."),
429 ModuleInstall("PyMySQL", "pip", mname="pymysql",
430 purpose="Pure-Python MySQL Driver", usage="SQL"),
431 ModuleInstall("mysqlclient", "wheel", mname="MySQLdb",
432 purpose="MySQL driver written in Python which does not depend on MySQL C client libraries and " +
433 "implements the DB API v2.0 specification (PEP-249).", usage="SQL"),
434 ModuleInstall("memory-profiler", "pip", mname="memory_profiler",
435 purpose="A module for monitoring memory usage of a python program", usage="PROFILING"),
436 ModuleInstall("pyinstrument_cext", "pip", usage="PROFILING",
437 purpose="Pyinstrument's C extensions - reducing the overhead of statistical profilers"),
438 ModuleInstall("pyinstrument", "pip", usage="PROFILING",
439 purpose="A Python profiler that records the call stack of the executing code, " +
440 "instead of just the final function in it."),
441 ModuleInstall("gprof2dot", "pip", usage="PROFILING",
442 purpose="This is a Python script to convert the output from many profilers into a dot graph."),
443 ModuleInstall("vprof", "pip", usage="PROFILING",
444 purpose="vprof is a Python package providing rich and interactive visualizations for various Python " +
445 "program characteristics such as running time and memory usage."),
446 ModuleInstall("snakeviz", "pip",
447 purpose="SnakeViz is a browser based graphical viewer for the output of Python’s cProfile module.", usage="PROFILING"),
448 ModuleInstall("httplib2", "pip",
449 purpose="A comprehensive HTTP client library."),
450 ModuleInstall("rsa", "pip",
451 purpose="Pure-Python RSA implementation"),
452 ModuleInstall("oauth2client", "pip",
453 purpose="The oauth2client is a client library for OAuth 2.0."),
454 ModuleInstall("uritemplate", "pip",
455 purpose="URI templates"),
456 ModuleInstall("jeepney", "pip",
457 purpose="This is a low-level, pure Python DBus protocol client. It has an I/O-free core, and " + \
458 "integration modules for different event loops."),
459 ModuleInstall("secretstorage", "pip",
460 purpose="This module provides a way for securely storing passwords and other secrets."),
461 ModuleInstall("keyring", "pip",
462 purpose="Store and access your passwords safely."),
463 # ModuleInstall("keyrings.alt", "pip", mname="keyrings.alt",
464 # purpose="Alternate keyring implementations"),
465 ModuleInstall("pyotp", "pip",
466 purpose="PyOTP is a Python library for generating and verifying one-time passwords."),
467 ModuleInstall("param", "pip",
468 purpose="Declarative Python programming using Parameters."),
469 ModuleInstall("pyviz_comms", "pip", usage="VIZ",
470 purpose="Bidirectional communication for PyViz."),
471 ModuleInstall("holoviews", "pip", usage="VIZ",
472 purpose="Composable, declarative data structures for building complex visualizations easily."),
473 ModuleInstall("geoviews", "pip", usage="VIZ",
474 purpose="Composable, declarative data structures for building complex visualizations easily."),
475 ModuleInstall("retrying", "pip", purpose="Retrying is an Apache 2.0 licensed general-purpose retrying library, " +
476 "written in Python, to simplify the task of adding retry behavior to just about anything."),
477 ModuleInstall("plotly", "pip", usage="VIZ",
478 purpose="Plotly's Python graphing library makes interactive, publication-quality graphs online. " +
479 "Examples of how to make line plots, " +
480 "scatter plots, area charts, bar charts, error bars, box plots, histograms, heatmaps, subplots, multiple-axes, " +
481 "polar charts and bubble charts."),
482 ModuleInstall("colorlover", "pip", usage="VIZ",
483 purpose="Color scales for IPython notebook"),
484 ModuleInstall("TA_Lib", "wheel", mname="talib",
485 purpose="This is a Python wrapper for TA-LIB based on Cython instead of SWIG."),
486 ModuleInstall("cufflinks", "pip", usage="VIZ",
487 purpose="Productivity Tools for Plotly + Pandas"),
488 ModuleInstall("lightning-python", "pip", mname="lightning", usage="VIZ",
489 purpose="Python client for the lightning API"),
490 ModuleInstall("passlib", "pip",
491 purpose="comprehensive password hashing framework supporting over 30 schemes"),
492 ModuleInstall("plac", "pip",
493 purpose="The smartest command line arguments parser in the world"),
494 ModuleInstall("pyOpenSSL", "pip", mname="OpenSSL",
495 purpose="Python wrapper module around the OpenSSL library"),
496 ModuleInstall("w3lib", "pip",
497 purpose="Library of web-related functions"),
498 # ModuleInstall('python-cloudfiles-hubic', 'github', "Gu1", mname="cloudfiles",
499 # web="https://github.com/Gu1/python-cloudfiles-hubic",
500 # purpose="access to Hubic"),
501 # ModuleInstall('onedrive-sdk-python', 'github', "OneDrive", mname="onedrivesdk",
502 # web="https://github.com/Gu1/python-cloudfiles-hubic/",
503 # purpose="access to OneDrive"),
504 # ModuleInstall('rlpy', 'pip', usage="DATA/ML",
505 # purpose="RLPy is a framework to conduct sequential decision making
506 # experiments. The current focus of this project lies on
507 # value-function-based reinforcement learning, specifically using
508 # linear function approximators (only Python 2.7)."),
509 ModuleInstall('wordcloud', 'wheel', usage="VIZ",
510 purpose="A little word cloud generator in Python."),
511 ModuleInstall('pytagcloud', 'pip',
512 purpose="Create beautiful tag clouds as images or HTML"),
514 # distributed
515 ModuleInstall('tblib', 'pip',
516 purpose="Traceback fiddling library. For now allows you to pickle tracebacks and raise exceptions with pickled " +
517 "tracebacks in different processes. This allows better error handling when running code over " +
518 "multiple processes (imagine multiprocessing, billiard, futures, celery etc)"),
519 ModuleInstall("zict", "pip",
520 purpose="The dictionary / mutable mapping interface is powerful and multi-faceted."),
522 # pdf
523 ModuleInstall("pyPdf", "github", "sdpython", usage="PDF", pipgit=True,
524 branch="trunk", purpose="read PDF"),
525 ModuleInstall("pdfrw", "pip", usage="PDF",
526 purpose="PDF file reader/writer library"),
527 # 2016-05
528 ModuleInstall("pydub", "pip", usage="MUSIC",
529 purpose="Pydub lets you do stuff to audio in a way that isn't stupid."),
530 ModuleInstall("cobble", "pip", purpose="Cobble is a Python library that allows easy creation of data objects, " +
531 "including implementations of common methods such as __eq__ and __repr__."),
532 ModuleInstall("parsimonious", "pip",
533 purpose="(Soon to be) the fastest pure-Python PEG parser I could muster"),
534 ModuleInstall(
535 "mammoth", "pip", purpose="Convert Word documents from docx to simple and clean HTML and Markdown"),
536 #
537 # 2016-06
538 #
539 # ModuleInstall("ipython-sql", "pip", purpose="RDBMS access via IPython", usgae="JUPYTER"),
540 ModuleInstall("julia", "pip",
541 purpose="Julia/Python bridge with IPython support", usage="DATA/ML"),
542 ModuleInstall("octave_kernel", "pip",
543 purpose="A Jupyter kernel for Octave."),
544 ModuleInstall("oct2py", "pip",
545 purpose="Python to GNU Octave bridge --> run m-files from python.", usage="DATA/ML"),
546 ModuleInstall("pg8000", "pip",
547 purpose="A Pure-Python PostgreSQL", usage="SQL"),
548 ModuleInstall("PyMeta3", "pip", mname="pymeta",
549 purpose="Pattern-matching language based on OMeta for Python 3 and 2"),
550 # ModuleInstall("ViTables", "pip", mname="vitables",
551 # purpose="A viewer for PyTables package"),
552 ModuleInstall("pybars3", "pip", mname="pybar",
553 purpose="Handlebars.js templating"),
554 ModuleInstall("db.py", "pip", mname="db.tables",
555 purpose="db.py is an easier way to interact with your databases. It makes it easier " +
556 "to explore tables, columns, views, etc. " +
557 "It puts the emphasis on user interaction, information display, and providing easy to use helper functions."),
558 ModuleInstall("clyent", "pip",
559 purpose="Command line client Library for windows and posix"),
560 ModuleInstall("chalmers", "pip",
561 purpose="Chalmers is an application that allows its users to monitor and control a number of processes on any " +
562 "operating system (Posix and Win32 included)"),
563 ModuleInstall("pyct", "pip", purpose="A utility package"),
564 ModuleInstall("colorcet", "pip",
565 purpose="colorcet is a collection of perceptually uniform colormaps for use with Python plotting programs " +
566 "like bokeh, matplotlib, holoviews, and datashader."),
567 ModuleInstall("datashader", "pip", usage="VIZ",
568 purpose="Datashader is a graphics pipeline system for creating meaningful representations " +
569 "of large amounts of data.") if sys.version_info[:2] >= (3, 5) else None,
570 ModuleInstall("dnspython", "pip", usage="WEB",
571 purpose="dnspython is a DNS toolkit for Python. It supports almost all record types. It can be used for queries, " +
572 "zone transfers, and dynamic updates. It supports TSIG authenticated messages and EDNS0."),
573 ModuleInstall("grin", "pip", usage="CLI",
574 purpose="A grep program configured the way I like it."),
575 ModuleInstall("ldap3", "pip", usage="WEB",
576 purpose="ldap3 is a strictly RFC 4510 conforming LDAP V3 pure Python client library."),
577 ModuleInstall("mpi4py", "wheel",
578 purpose="MPI for Python"),
579 ModuleInstall("mss", "pip", mname="mms",
580 purpose="An ultra fast cross-platform multiple screenshots module in pure python using ctypes"),
581 #
582 # June 2016
583 #
584 ModuleInstall("pyglet", "pip", usage="GUI",
585 purpose="a cross-platform windowing and multimedia library for Python"),
586 ModuleInstall("geoplotlib", "pip", usage="VIZ",
587 purpose="geoplotlib is a python toolbox for visualizing geographical data and making maps"),
588 ModuleInstall("leather", "pip", usage="VIZ",
589 purpose="Leather is the Python charting library for those who need charts now and don’t care if they’re perfect."),
590 ModuleInstall("pythreejs", "pip", usage="VIZ",
591 purpose="A Python / ThreeJS bridge utilizing the Jupyter widget infrastructure."),
592 ModuleInstall("missingno", "pip", usage="VIZ",
593 purpose="Messy datasets? Missing values? missingno provides a small toolset of flexible and easy-to-use " +
594 "missing data visualizations and utilities that allows you to get a quick visual summary of the completeness " +
595 "(or lack thereof) of your dataset."),
596 ModuleInstall("vega", "pip", usage="VIZ",
597 purpose="Python/Jupyter notebook module for Vega, and Vega-Lite, Polestar, and Voyager. Notebooks " +
598 "with embedded visualizations can be viewed on github and nbviewer."),
599 ModuleInstall("pydy", "pip",
600 purpose="Multibody Dynamics with Python"),
601 ModuleInstall("apache-libcloud", "pip", mname="libcloud",
602 purpose="A standard Python library that abstracts away differences among multiple cloud provider APIs."),
603 ModuleInstall("click-plugins", "pip", mname="click_plugins",
604 purpose="An extension module for click to enable registering CLI commands via setuptools entry-points."),
605 ModuleInstall("munch", "pip",
606 purpose="A dot-accessible dictionary (a la JavaScript objects)."),
607 ModuleInstall("cligj", "pip",
608 purpose="Click params for commmand line interfaces to GeoJSON"),
609 ModuleInstall("Fiona", "wheel", usage="GEO", mname="fiona",
610 purpose="Fiona is OGR’s neat, nimble, no-nonsense API for Python programmers."),
611 ModuleInstall("brythonmagic", "pip",
612 purpose="Magics to use brython in Jupyter notebook."),
613 ModuleInstall(
614 "asteval", "pip", purpose="Safe, minimalistic evaluator of python expression using ast module"),
615 ModuleInstall(
616 "uncertainties", "pip", purpose="uncertainties allows calculations such as (2 +/- 0.1)*2 = 4 " +
617 "+/- 0.2 to be performed transparently."),
618 ModuleInstall(
619 "lmfit", "pip", purpose="Least-Squares Minimization with Bounds and Constraints", usage="OPTIM"),
620 #
621 # August, September, October, December 2016
622 #
623 ModuleInstall('QInfer', 'pip', mname="qinfer", usage="DATA/ML",
624 purpose="QInfer is a library using Bayesian sequential Monte Carlo for quantum parameter estimation."),
625 ModuleInstall('pscript', 'pip', purpose="for flexx"),
626 ModuleInstall('webruntime', 'pip', purpose="for flexx"),
627 ModuleInstall('dialite', 'pip', purpose="for flexx"),
628 ModuleInstall('flexx', 'pip', usage="GUI",
629 purpose="Flexx is a pure Python toolkit for creating graphical user interfaces (GUI's), " +
630 "that uses web technology for its rendering. Apps are written purely in Python; Flexx' " +
631 "transpiler generates the necessary JavaScript on the fly."),
632 ModuleInstall('pypng', 'pip',
633 purpose="Pure Python PNG image encoder/decoder"),
634 ModuleInstall('colormath', 'pip',
635 purpose="Color math and conversion library."),
636 ModuleInstall('arrow', 'pip',
637 purpose="Better dates and times for Python"),
638 ModuleInstall('custom_inherit', 'pip',
639 purpose="A Python package that provides tools for inheriting docstrings in customizable ways."),
640 ModuleInstall('toyplot', 'pip', usage="VIZ",
641 purpose="The kid-sized plotting toolkit for Python with grownup-sized goals."),
642 ModuleInstall('images2gif', 'pip',
643 purpose="Create a GIF from a list of images."),
644 ModuleInstall('hypothesis', 'pip',
645 purpose="Hypothesis is an advanced testing library for Python. It lets you write tests which are parametrized " +
646 "by a source of examples, and then generates simple and comprehensible examples that make your tests fail. " +
647 "This lets you find more bugs in your code with less work."),
648 ModuleInstall('monotonic', 'pip',
649 purpose="This module provides a monotonic() function which returns the value (in fractional seconds) " +
650 "of a clock which never goes backwards. " +
651 "It is compatible with Python 2 and Python 3."),
652 ModuleInstall('fasteners', 'pip',
653 purpose="A python package that provides useful locks."),
654 ModuleInstall('asciitree', 'pip',
655 purpose="Draws ASCII trees."),
656 ModuleInstall('numcodecs', 'wheel',
657 purpose="Numcodecs is a Python package providing buffer compression and transformation codecs for use " +
658 "in data storage and communication applications."),
659 ModuleInstall('zarr', 'pip',
660 purpose="A minimal implementation of chunked, compressed, N-dimensional arrays for Python."),
661 ModuleInstall('rx', 'pip',
662 purpose="Reactive Extensions (Rx) for Python (LINQ)"),
663 ModuleInstall('PySocks', 'pip', mname="socks",
664 purpose="A semi-actively maintained SocksiPy fork. Contains many improvements to the original."),
665 ModuleInstall('pympler', 'pip',
666 purpose="Pympler is a development tool to measure, monitor and analyze the memory behavior of Python " +
667 "objects in a running Python application."),
668 ModuleInstall('fbpca', 'pip',
669 purpose="Functions for principal component analysis (PCA) and accuracy checks."),
670 ModuleInstall('prince', 'pip',
671 purpose="Prince is a factor analysis library for datasets that fit in memory."),
672 ModuleInstall('pivottablejs', 'pip',
673 purpose="PivotTable.js integration for Jupyter/IPython Notebook."),
674 #
675 # January 2017
676 #
677 ModuleInstall('pystan', 'pip', usage="DATA/ML",
678 purpose="PyStan provides an interface to Stan, a package for Bayesian inference using " +
679 "the No-U-Turn sampler, a variant of Hamiltonian Monte Carlo."),
680 ModuleInstall('ephem', 'pip', purpose="for fbprophet"),
681 ModuleInstall('convertdate', 'pip', purpose="for fbprophet"),
682 ModuleInstall('holidays', 'pip', purpose="for fbprophet"),
683 ModuleInstall('lunardate', 'pip', purpose="for fbprophet"),
684 ModuleInstall('fbprophet', 'pip', usage="DATA/ML",
685 purpose="Prophet is a procedure for forecasting time series data. It is based on an additive " +
686 "model where non-linear trends are fit with yearly and weekly seasonality, plus holidays. " +
687 "It works best with daily periodicity data with at least one year of historical data. " +
688 "Prophet is robust to missing data, shifts in the trend, and large outliers."),
689 ModuleInstall('wikipedia', 'pip',
690 purpose="Wikipedia API for Python"),
691 ModuleInstall('validate_email', 'pip',
692 purpose="Validate_email verify if an email address is valid and really exists."),
693 ModuleInstall('simhash', 'pip',
694 purpose="A Python implementation of Simhash Algorithm"),
695 ModuleInstall('wptools', 'pip',
696 purpose="Wikipedia tools (for Humans)"),
697 #
698 # June 2017
699 #
700 ModuleInstall('pytest_runner', 'pip',
701 purpose="Setup scripts can use pytest-runner to add setup.py test support for pytest runner."),
702 ModuleInstall('fastparquet', 'wheel',
703 purpose="fastparquet is a python implementation of the parquet format, aiming integrate " +
704 "into python-based big data work-flows."),
705 ModuleInstall('citeproc-py', 'pip', mname="citeproc_py",
706 purpose="citeproc-py is a CSL processor for Python. It aims to implement the CSL 1.0.1 specification. " +
707 "citeproc-py can output styled citations and bibliographies in a number of different output formats. " +
708 "Currently supported are plain text, reStructuredText and HTML. Other formats can be added easily."),
709 ModuleInstall('duecredit', 'pip',
710 purpose="Publications (and donations) tracer"),
711 #
712 # September 2017
713 #
714 ModuleInstall('Brotli', 'wheel', mname="brotli",
715 purpose="Brotli is a generic-purpose lossless compression algorithm that compresses data using a " +
716 "combination of a modern variant of the LZ77 algorithm, Huffman coding and 2nd order context modeling, " +
717 "with a compression ratio comparable to the best currently available general-purpose compression methods. " +
718 "It is similar in speed with deflate but offers more dense compression."),
719 ModuleInstall('fast-histogram', 'wheel2', mname="fast_histogram",
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('mizani', 'pip',
723 purpose="Mizani is a scales package for graphics. It is written in Python and is " +
724 "based on Hadley Wickham's Scales."),
725 ModuleInstall('mpl-scatter-density', 'pip', mname="mpl_scatter_density",
726 purpose="Matplotlib helpers to make density scatter plots"),
727 ModuleInstall('pybind11', 'pip', usage="C++",
728 purpose="pybind11 is a lightweight header-only library that exposes C++ types in Python and vice versa, " +
729 "mainly to create Python bindings of existing C++ code."),
730 ModuleInstall('mypy_extensions', 'pip', purpose="for mypy"),
731 ModuleInstall('mypy', 'pip',
732 purpose="Mypy is an experimental optional static type checker for Python that aims to combine the benefits of " +
733 "dynamic (or 'duck') typing and static typing."),
734 ModuleInstall('pypandoc', 'pip',
735 purpose="Pypandoc provides a thin wrapper for pandoc, a universal document converter."),
736 ModuleInstall('pocket', 'pip',
737 purpose="Access to pocket API."),
738 #
739 # November 2017
740 #
741 ModuleInstall('seasonal', 'pip', purpose="timeseries", usage="ML"),
742 #
743 # December 2017
744 #
745 ModuleInstall('gdown', 'pip',
746 purpose="Google Drive direct download of big files."),
747 ModuleInstall('pytube3', 'pip',
748 purpose="play with youtube videos"),
749 #
750 # Mars, Avril 2018
751 #
752 ModuleInstall('pyjsparser', 'pip',
753 purpose="Fast javascript parser (based on esprima.js)"),
754 ModuleInstall('Js2Py', 'pip', mname="js2py",
755 purpose="JavaScript to Python Translator & JavaScript interpreter written in 100% pure Python."),
756 ModuleInstall('pythonnet', 'wheel', mname="clr",
757 purpose="Python binding for C#"),
758 #
759 # July 2018
760 #
761 ModuleInstall('lml', 'pip',
762 purpose="lml seamlessly finds the lml based plugins from your current python " +
763 "environment but loads your plugins on demand. It is designed to support plugins " +
764 "that have external dependencies, especially bulky and/or memory hungry ones. " +
765 "lml provides the plugin management system only and the plugin interface is on your shoulder."),
766 ModuleInstall('macropy3', 'pip',
767 purpose='MacroPy is an implementation of Syntactic Macros in the Python Programming ' +
768 'Language. MacroPy provides a mechanism for user-defined functions (macros) to perform ' +
769 'transformations on the abstract syntax tree (AST) of a Python program at import time. This ' +
770 'is an easy way to enhance the semantics of a Python program in ways which are otherwise ' +
771 'impossible, for example providing an extremely concise way of declaring classes.'),
772 ModuleInstall('dukpy', 'pip',
773 purpose='DukPy is a simple javascript interpreter for Python built on top of duktape ' +
774 'engine without any external dependency. It comes with a bunch of common transpilers ' +
775 'built-in for convenience.'),
776 ModuleInstall('javascripthon', 'pip',
777 purpose='a Python 3 to ES6 JavaScript translator'),
778 ModuleInstall('pyecharts', 'pip',
779 purpose='pyecharts is a library to generate charts using Echarts. It simply provides ' +
780 'the interface of 28+ kinds of charts between Echarts and Python.'),
781 ModuleInstall('pyecharts-javascripthon', 'pip', mname='pyecharts_javascripthon',
782 purpose='pyecharts-javascripthon helps translate Python functions into javascript ones. ' +
783 'It uses javascripthon and dukpy to blend Python codes into javascript runtime. It supports ' +
784 'python 2.7, 3.4, 3.5 and 3.6. It works on Linux, MacOS and Windows platforms.'),
785 ModuleInstall('pyecharts-snapshot', 'pip', mname='pyecharts_snapshot',
786 purpose='pyecharts-snapshot renders the output of pyecharts as a png, jpeg, gif, svg image ' +
787 'or a pdf file at command line or in your code.'),
788 ModuleInstall('jupyter-echarts-pypkg', 'pip', mname='jupyter_echarts_pypkg',
789 purpose='The project packages jupyter-echarts and distributes it via pypi.'),
790 ModuleInstall('yahoo-historical', 'pip', mname="yahoo_historical",
791 purpose='Python module to get stock data from Yahoo! Finance'),
792 #
793 # October 2019
794 #
795 ModuleInstall('wsproto', 'pip',
796 purpose='Pure Python, pure state-machine WebSocket implementation.'),
797 ModuleInstall('h11', 'pip',
798 purpose='This is a little HTTP/1.1 library written from scratch in Python, '
799 'heavily inspired by hyper-h2.'),
800 ModuleInstall('httptools', 'pip',
801 purpose='httptools is a Python binding for nodejs HTTP parser. '
802 'It\'s still in a very early development stage, expect '
803 'APIs to break.'),
804 ModuleInstall('hypercorn', 'pip',
805 purpose='Hypercorn is an ASGI web server based on the sans-io hyper, h11, '
806 'h2, and wsproto libraries and inspired by Gunicorn.'),
807 ModuleInstall('priority', 'pip',
808 purpose='Priority is a pure-Python implementation of the priority logic '
809 'for HTTP/2.'),
810 ModuleInstall('starlette', 'pip',
811 purpose='Starlette is a lightweight ASGI framework/toolkit, which is ideal '
812 'for building high performance asyncio services.'),
813 ModuleInstall('uvicorn', 'pip',
814 purpose='Uvicorn is a lightning-fast ASGI server implementation, '
815 'using uvloop and httptools.'),
816 ModuleInstall('websockets', 'pip',
817 purpose='websockets is a library for building WebSocket servers and '
818 'clients in Python with a focus on correctness and simplicity.'),
819 #
820 # December 2019
821 #
822 ModuleInstall('py-spy', 'pip',
823 purpose='profiler implemented in rust, works like a C++ profiler'),
824 ModuleInstall('pydicom', 'pip',
825 purpose='pydicom is a pure python package for working with DICOM files. '
826 'It was made for inspecting and modifying DICOM data in an easy '
827 '"pythonic" way. The modifications can be written again to a new '
828 'file.'),
829 ]
831 return [_ for _ in mod if _ is not None]