1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
|
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
.r1 {font-weight: bold}
.r2 {color: #f8f8f2; text-decoration-color: #f8f8f2; background-color: #282a36}
.r3 {color: #f8f8f2; text-decoration-color: #f8f8f2; background-color: #282a36; font-style: italic}
.r4 {color: #bd93f9; text-decoration-color: #bd93f9; background-color: #282a36; text-decoration: underline}
.r5 {color: #ffffff; text-decoration-color: #ffffff; font-weight: bold}
.r6 {color: #949494; text-decoration-color: #949494}
.r7 {color: #f8f8f2; text-decoration-color: #f8f8f2; background-color: #272822}
.r8 {background-color: #272822}
.r9 {color: #c6c6c6; text-decoration-color: #c6c6c6; background-color: #121212}
.r10 {color: #ff4689; text-decoration-color: #ff4689; background-color: #272822}
.r11 {color: #e6db74; text-decoration-color: #e6db74; background-color: #272822}
.r12 {color: #ed007e; text-decoration-color: #ed007e; background-color: #1e0010}
.r13 {color: #66d9ef; text-decoration-color: #66d9ef; background-color: #272822}
.r14 {color: #a6e22e; text-decoration-color: #a6e22e; background-color: #272822}
.r15 {color: #ae81ff; text-decoration-color: #ae81ff; background-color: #272822}
.r16 {color: #ff5555; text-decoration-color: #ff5555; font-weight: bold}
.r17 {color: #8be9fd; text-decoration-color: #8be9fd; font-weight: bold}
.r18 {color: #ff79c6; text-decoration-color: #ff79c6; font-weight: bold}
.r19 {color: #50fa7b; text-decoration-color: #50fa7b}
body {
color: #f8f8f2;
background-color: #282a36;
}
</style>
</head>
<body>
<pre style="font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace"><code style="font-family:inherit"><span class="r1">╔══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗</span>
<span class="r1">║ Introduction ║</span>
<span class="r1">╚══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝</span>
<span class="r2">Rich is a Python library for writing </span><span class="r3">rich</span><span class="r2"> text (with color and style) to the terminal, and for displaying advanced </span>
<span class="r2">content such as tables, markdown, and syntax highlighted code.</span>
<span class="r2">Use Rich to make your command line applications visually appealing and present data in a more readable way. Rich can </span>
<span class="r2">also be a useful debugging aid by pretty printing and syntax highlighting data structures.</span>
<span class="r1">╔══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗</span>
<span class="r1">║ Requirements ║</span>
<span class="r1">╚══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝</span>
<span class="r2">Rich works with OSX, Linux and Windows.</span>
<span class="r2">On Windows both the (ancient) cmd.exe terminal is supported and the new </span><a class="r4" href="https://github.com/microsoft/terminal/releases">Windows Terminal</a><span class="r2">. The latter has much improved </span>
<span class="r2">support for color and style.</span>
<span class="r2">Rich requires Python 3.6.1 and above. Note that Python 3.6.0 is </span><span class="r3">not</span><span class="r2"> supported due to lack of support for methods on </span>
<span class="r2">NamedTuples.</span>
<span class="r5">╭─────────────────────────────────────────────────────── Note: ───────────────────────────────────────────────────────╮</span>
<span class="r5">│ PyCharm users will need to enable "emulate terminal" in output console option in run/debug configuration to see │</span>
<span class="r5">│ styled output. │</span>
<span class="r5">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>
<span class="r1">╔══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗</span>
<span class="r1">║ Installation ║</span>
<span class="r1">╚══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝</span>
<span class="r2">You can install Rich from PyPI with pip or your favorite package manager:</span>
<span class="r6">┌─────────────────────────────────────────────────────── python ───────────────────────────────────────────────────────┐</span>
<span class="r6">│</span> <span class="r7">pip install rich</span><span class="r8"> </span> <span class="r6">│</span>
<span class="r6">└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘</span>
<span class="r2">Add the </span><span class="r9">-U</span><span class="r2"> switch to update to the current version, if Rich is already installed.</span>
<span class="r2">If you intend to use Rich with Jupyter then there are some additional dependencies which you can install with the </span>
<span class="r2">following command:</span>
<span class="r6">┌─────────────────────────────────────────────────────── python ───────────────────────────────────────────────────────┐</span>
<span class="r6">│</span> <span class="r7">pip install rich[jupyter]</span><span class="r8"> </span> <span class="r6">│</span>
<span class="r6">└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘</span>
<span class="r1">╔══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗</span>
<span class="r1">║ Quick Start ║</span>
<span class="r1">╚══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝</span>
<span class="r2">The quickest way to get up and running with Rich is to import the alternative </span><span class="r9">print</span><span class="r2"> function which takes the same </span>
<span class="r2">arguments as the built-in </span><span class="r9">print</span><span class="r2"> and may be used as a drop-in replacement. Here's how you would do that:</span>
<span class="r6">┌─────────────────────────────────────────────────────── python ───────────────────────────────────────────────────────┐</span>
<span class="r6">│</span> <span class="r10">from</span><span class="r7"> rich </span><span class="r10">import</span><span class="r7"> print</span><span class="r8"> </span> <span class="r6">│</span>
<span class="r6">└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘</span>
<span class="r2">You can then print strings or objects to the terminal in the usual way. Rich will do some basic syntax highlighting and </span>
<span class="r2">format data structures to make them easier to read.</span>
<span class="r2">Strings may contain :ref:`console_markup` which can be used to insert color and styles in to the output.</span>
<span class="r2">The following demonstrates both console markup and pretty formatting of Python objects:</span>
<span class="r6">┌─────────────────────────────────────────────────────── python ───────────────────────────────────────────────────────┐</span>
<span class="r6">│</span> <span class="r10">>>></span><span class="r7"> print(</span><span class="r11">"[italic red]Hello[/italic red] World!"</span><span class="r7">, locals())</span><span class="r8"> </span> <span class="r6">│</span>
<span class="r6">└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘</span>
<span class="r2">This writes the following output to the terminal (including all the colors and styles):</span>
<span class="r6">┌─────────────────────────────────────────────── raw stripped raw html ────────────────────────────────────────────────┐</span>
<span class="r6">│</span> <span class="r7">Hello World</span><span class="r12">!</span><span class="r8"> </span> <span class="r6">│</span>
<span class="r6">│</span> <span class="r7">{</span><span class="r8"> </span> <span class="r6">│</span>
<span class="r6">│</span> <span class="r7"> </span><span class="r11">'__annotations__'</span><span class="r7">: {},</span><span class="r8"> </span> <span class="r6">│</span>
<span class="r6">│</span> <span class="r7"> </span><span class="r11">'__builtins__'</span><span class="r7">: </span><span class="r10"><</span><span class="r7">module </span><span class="r11">'builtins'</span><span class="r7"> (built</span><span class="r10">-in</span><span class="r7">)</span><span class="r10">></span><span class="r7">,</span><span class="r8"> </span> <span class="r6">│</span>
<span class="r6">│</span> <span class="r7"> </span><span class="r11">'__doc__'</span><span class="r7">: </span><span class="r13">None</span><span class="r7">,</span><span class="r8"> </span> <span class="r6">│</span>
<span class="r6">│</span> <span class="r7"> </span><span class="r11">'__loader__'</span><span class="r7">: </span><span class="r10"><</span><span class="r13">class</span><span class="r7"> </span><span class="r12">'</span><span class="r14">_frozen_importlib</span><span class="r10">.</span><span class="r7">BuiltinImporter</span><span class="r11">'>,</span><span class="r8"> </span> <span class="r6">│</span>
<span class="r6">│</span> <span class="r7"> </span><span class="r11">'__name__'</span><span class="r7">: </span><span class="r11">'__main__'</span><span class="r7">,</span><span class="r8"> </span> <span class="r6">│</span>
<span class="r6">│</span> <span class="r7"> </span><span class="r11">'__package__'</span><span class="r7">: </span><span class="r13">None</span><span class="r7">,</span><span class="r8"> </span> <span class="r6">│</span>
<span class="r6">│</span> <span class="r7"> </span><span class="r11">'__spec__'</span><span class="r7">: </span><span class="r13">None</span><span class="r7">,</span><span class="r8"> </span> <span class="r6">│</span>
<span class="r6">│</span> <span class="r7"> </span><span class="r11">'print'</span><span class="r7">: </span><span class="r10"><</span><span class="r7">function print at </span><span class="r15">0x1027fd4c0</span><span class="r10">></span><span class="r7">,</span><span class="r8"> </span> <span class="r6">│</span>
<span class="r6">│</span> <span class="r7">} </span><span class="r8"> </span> <span class="r6">│</span>
<span class="r6">└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘</span>
<span class="r2">If you would rather not shadow Python's built-in print, you can import </span><span class="r9">rich.print</span><span class="r2"> as </span><span class="r9">rprint</span><span class="r2"> (for example):</span>
<span class="r6">┌─────────────────────────────────────────────────────── python ───────────────────────────────────────────────────────┐</span>
<span class="r6">│</span> <span class="r10">from</span><span class="r7"> rich </span><span class="r10">import</span><span class="r7"> print </span><span class="r13">as</span><span class="r7"> rprint</span><span class="r8"> </span> <span class="r6">│</span>
<span class="r6">└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘</span>
<span class="r2">Continue reading to learn about the more advanced features of Rich.</span>
<span class="r1">╔══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗</span>
<span class="r1">║ Rich in the REPL ║</span>
<span class="r1">╚══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝</span>
<span class="r2">Rich may be installed in the REPL so that Python data structures are automatically pretty printed with syntax </span>
<span class="r2">highlighting. Here's how:</span>
<span class="r6">┌─────────────────────────────────────────────────────── python ───────────────────────────────────────────────────────┐</span>
<span class="r6">│</span> <span class="r10">>>></span><span class="r7"> </span><span class="r10">from</span><span class="r7"> rich </span><span class="r10">import</span><span class="r7"> pretty</span><span class="r8"> </span> <span class="r6">│</span>
<span class="r6">│</span> <span class="r10">>>></span><span class="r7"> pretty</span><span class="r10">.</span><span class="r7">install()</span><span class="r8"> </span> <span class="r6">│</span>
<span class="r6">│</span> <span class="r10">>>></span><span class="r7"> [</span><span class="r11">"Rich and pretty"</span><span class="r7">, </span><span class="r13">True</span><span class="r7">]</span><span class="r8"> </span> <span class="r6">│</span>
<span class="r6">└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘</span>
<span class="r2">You can also use this feature to try out Rich </span><span class="r3">renderables</span><span class="r2">. Here's an example:</span>
<span class="r6">┌─────────────────────────────────────────────────────── python ───────────────────────────────────────────────────────┐</span>
<span class="r6">│</span> <span class="r10">>>></span><span class="r7"> </span><span class="r10">from</span><span class="r7"> rich.panel </span><span class="r10">import</span><span class="r7"> Panel</span><span class="r8"> </span> <span class="r6">│</span>
<span class="r6">│</span> <span class="r10">>>></span><span class="r7"> Panel</span><span class="r10">.</span><span class="r7">fit(</span><span class="r11">"[bold yellow]Hi, I'm a Panel"</span><span class="r7">, border_style</span><span class="r10">=</span><span class="r11">"red"</span><span class="r7">)</span><span class="r8"> </span> <span class="r6">│</span>
<span class="r6">└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘</span>
<span class="r2">Read on to learn more about Rich renderables.</span>
<span class="r1">╔══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗</span>
<span class="r1">║ IPython Extension ║</span>
<span class="r1">╚══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝</span>
<span class="r2">Rich also includes an IPython extension that will do this same pretty install + pretty tracebacks. Here's how to load </span>
<span class="r2">it:</span>
<span class="r6">┌─────────────────────────────────────────────────────── python ───────────────────────────────────────────────────────┐</span>
<span class="r6">│</span> <span class="r7">In [</span><span class="r15">1</span><span class="r7">]: </span><span class="r10">%</span><span class="r7">load_ext rich</span><span class="r8"> </span> <span class="r6">│</span>
<span class="r6">└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘</span>
<span class="r2">You can also have it load by default by adding "rich" to the </span><span class="r9">c.InteractiveShellApp.extension</span><span class="r2"> variable in </span><a class="r4" href="https://ipython.readthedocs.io/en/stable/config/intro.html">IPython </a>
<a class="r4" href="https://ipython.readthedocs.io/en/stable/config/intro.html">Configuration</a><span class="r2">.</span>
<span class="r1">╔══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗</span>
<span class="r1">║ Rich Inspect ║</span>
<span class="r1">╚══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝</span>
<span class="r2">Rich has an :meth:`~rich.inspect` function which can generate a report on any Python object. It is a fantastic debug </span>
<span class="r2">aid, and a good example of the output that Rich can generate. Here is a simple example:</span>
<span class="r6">┌─────────────────────────────────────────────────────── python ───────────────────────────────────────────────────────┐</span>
<span class="r6">│</span> <span class="r10">>>></span><span class="r7"> </span><span class="r10">from</span><span class="r7"> rich </span><span class="r10">import</span><span class="r7"> inspect</span><span class="r8"> </span> <span class="r6">│</span>
<span class="r6">│</span> <span class="r10">>>></span><span class="r7"> </span><span class="r10">from</span><span class="r7"> rich.color </span><span class="r10">import</span><span class="r7"> Color</span><span class="r8"> </span> <span class="r6">│</span>
<span class="r6">│</span> <span class="r10">>>></span><span class="r7"> color </span><span class="r10">=</span><span class="r7"> Color</span><span class="r10">.</span><span class="r7">parse(</span><span class="r11">"red"</span><span class="r7">)</span><span class="r8"> </span> <span class="r6">│</span>
<span class="r6">│</span> <span class="r10">>>></span><span class="r7"> inspect(color, methods</span><span class="r10">=</span><span class="r13">True</span><span class="r7">)</span><span class="r8"> </span> <span class="r6">│</span>
<span class="r6">└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘</span>
<span class="r16">╭──────────────────────────────────────── System Message: Problematic Element ─────────────────────────────────────────╮</span>
<span class="r16">│</span> <span class="r14">:ref:</span><span class="r7">`console_markup`</span><span class="r8"> </span> <span class="r16">│</span>
<span class="r16">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>
<span class="r17">╭───────────────────────────────── System Message: INFO/1 (<rst-document>, line 43); ──────────────────────────────────╮</span>
<span class="r17">│</span> <span class="r1"><</span><span class="r18">rst-document</span><span class="r1">></span>:<span class="r17">43</span>: <span class="r1">(</span>INFO/<span class="r17">1</span><span class="r1">)</span> No role entry for <span class="r19">"ref"</span> in module <span class="r19">"docutils.parsers.rst.languages.en"</span>. <span class="r17">│</span>
<span class="r17">│</span> Trying <span class="r19">"ref"</span> as canonical role name. <span class="r17">│</span>
<span class="r17">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>
<span class="r16">╭───────────────────────────────── System Message: ERROR/3 (<rst-document>, line 43); ─────────────────────────────────╮</span>
<span class="r16">│</span> <span class="r1"><</span><span class="r18">rst-document</span><span class="r1">></span>:<span class="r17">43</span>: <span class="r1">(</span>ERROR/<span class="r17">3</span><span class="r1">)</span> Unknown interpreted text role <span class="r19">"ref"</span>. <span class="r16">│</span>
<span class="r16">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>
<span class="r16">╭──────────────────────────────────────── System Message: Problematic Element ─────────────────────────────────────────╮</span>
<span class="r16">│</span> <span class="r14">:meth:</span><span class="r7">`~rich.inspect`</span><span class="r8"> </span> <span class="r16">│</span>
<span class="r16">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>
<span class="r17">╭───────────────────────────────── System Message: INFO/1 (<rst-document>, line 101); ─────────────────────────────────╮</span>
<span class="r17">│</span> <span class="r1"><</span><span class="r18">rst-document</span><span class="r1">></span>:<span class="r17">101</span>: <span class="r1">(</span>INFO/<span class="r17">1</span><span class="r1">)</span> No role entry for <span class="r19">"meth"</span> in module <span class="r19">"docutils.parsers.rst.languages.en"</span>. <span class="r17">│</span>
<span class="r17">│</span> Trying <span class="r19">"meth"</span> as canonical role name. <span class="r17">│</span>
<span class="r17">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>
<span class="r16">╭──────────────────────────────── System Message: ERROR/3 (<rst-document>, line 101); ─────────────────────────────────╮</span>
<span class="r16">│</span> <span class="r1"><</span><span class="r18">rst-document</span><span class="r1">></span>:<span class="r17">101</span>: <span class="r1">(</span>ERROR/<span class="r17">3</span><span class="r1">)</span> Unknown interpreted text role <span class="r19">"meth"</span>. <span class="r16">│</span>
<span class="r16">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>
</code></pre>
</body>
</html>
|