Live coding in Python with PyCharm, Emacs, Sublime Text, or even a browser

Overview

Live Coding in Python

Build Status Code Coverage PyCharm downloads Sublime downloads Package Version

Visualize your Python code while you type it in PyCharm, Emacs, Sublime Text, or even your browser.

To see how to use one of the Live Coding in Python plugins, watch the demo video or read the getting started pages for PyCharm, Emacs, or Sublime Text. Want to try it without installing anything? Try the browser version. You can also try Space Tracer, the command-line tool that trades time for space when you debug. You might also find some useful examples in the tools folder. To learn more, read about how it works.

Screenshot of a star diagram

Special thanks to James Davies for contributing the Sublime Text support, and to Antti Kaihola and Christoph Paulik for contributing the Emacs support. Thanks to all the contributors for helping in all kinds of ways, and thanks to JetBrains for the free PyCharm and IDEA licenses.

If you like this project, check out some of my other projects.

Feature Comparison

So far, the Emacs mode seems to be the most popular way to use live coding in Python. The PyCharm plugin has the most features.

Feature PyCharm Emacs Sublime browser space_tracer
variable assignments Y Y Y Y Y
looping Y Y Y Y Y
function calls Y Y Y Y Y
errors and exceptions Y Y Y Y Y
print function Y Y Y Y Y
unit tests Y Y Y Y
turtle graphics Y
matplotlib preview Y Y
pyglet preview Y Y

If you find the project useful, help us make it better.

Installing the PyCharm plugin

This assumes you already have PyCharm installed, you have configured a Python interpreter, and you can run a Python script normally.

  1. From the File menu, choose Settings....
  2. Click on the Plugins section.
  3. Click the Browse Repositories... button.
  4. Type live coding in the search box, and click on the "Live Coding in Python" entry in the list below.
  5. Click the green Install button on the right.
  6. Click the Restart PyCharm button.
  7. Close all the dialog boxes by clicking OK, then let PyCharm restart when it asks.
  8. Open a Python file.
  9. Run the Python file normally, as a script or a unit test.
  10. With the same run configuration selected in the drop down, choose Start Live Coding from the Run menu.

Uninstalling the PyCharm plugin

  1. From the File menu, choose Settings....
  2. Click on the Plugins section.
  3. In the list of plugins, click on Live Coding in Python.
  4. Click the Uninstall button on the right.
  5. Click the Restart PyCharm button.
  6. Close all the dialog boxes by clicking OK, then let PyCharm restart.

Installing the Emacs mode

It's probably easiest to use the MELPA package archive, as described in this section, but the next section gives instructions for installing without MELPA.

  1. Install GNU Emacs if you don't already have it.
  2. Install MELPA. You probably want to follow the instructions for the stable version, instead of the default bleeding-edge version.
  3. Launch the package installer with M-x package-list-packages.
  4. Find the package with C-s live-py-mode.
  5. Mark the package to install with i, then execute the installation with x.
  6. Open any Python file, and activate live-py-mode with M-x live-py-mode. You should see an extra window on the right that shows the results of running your code.
  7. Type C-h m and scroll down to the Live-Py section to see all the advanced features that let you run other versions of Python or drive your live coding from another script or a unit test.

Installing the Emacs mode without MELPA

  1. Install GNU Emacs if you don't already have it.

  2. Clone the latest version of the live-py Emacs mode:

     git clone https://github.com/donkirkby/live-py-plugin.git
    
  3. Copy the Emacs Lisp file and the supporting Python files into a directory which is in your Emacs load-path. For example:

     cd live-py-plugin
     mkdir -p ~/.emacs.d/packages
     cp emacs-live-py-mode/live-py-mode.el plugin/PySrc/space_tracer ~/.emacs.d/packages
    

    Add ~/.emacs.d/ to your load-path in ~/.emacs.d/init.el or ~/.emacs:

     (add-to-list 'load-path "~/.emacs.d/packages")
    
  4. Load the Lisp library in your ~/.emacs.d/init.el or ~/.emacs:

     (require 'live-py-mode)
    
  5. Restart Emacs.

  6. Open any Python file, and activate live-py-mode with M-x live-py-mode. You should see an extra window on the right that shows the results of running your code.

  7. Type C-h m and scroll down to the Live-Py section to see all the advanced features that let you run other versions of Python or drive your live coding from another script or a unit test.

Uninstalling the Emacs mode

If you installed with MELPA, just use it to uninstall. If not, follow these steps:

  1. Remove the files you copied into ~/.emacs.d/:
  2. Revert additions to ~/.emacs.d/init.el or ~/.emacs.
  3. Restart Emacs.

Installing the Sublime Text plugin

It's easiest to install from package control, but you can find a manual method in the CONTRIBUTING file.

  1. Install package control.
  2. Open the command palette by typing Ctrl+Shift+P.
  3. Type "Package" and then select Package Control: Install Package.
  4. Start typing "Live Coding in Python" and select it when it appears in the list.
  5. When it finishes installing, you should see a new "Live Coding" menu.
  6. Live coding should now work for simple scripts.
  7. Navigate to Preferences -> Package settings -> Live Coding.
  8. Set the path to your preferred Python executable, particularly if you want to use a virtual environment. The default is python.
  9. Save and close this pane.
  10. Open or create a Python file.
  11. Navigate to Live Coding -> Start
  12. This should bring up a new pane on the right with the live coding display.
  13. Begin typing in the left pane and see the code trace results on the right.

Uninstalling the Sublime Text plugin

  1. Open Sublime Text 3.
  2. Open the command palette by typing Ctrl+Shift+P.
  3. Type "Package" and then select Package Control: Remove Package.
  4. Start typing "Live Coding in Python" and select it when it appears in the list.
Comments
  • Support SublimeText3

    Support SublimeText3

    The core of this project is the code_tracer.py file that runs the user's script and builds a display of its execution. That script can be called from any editor, so it's not too hard to add basic support for live coding in another editor like vim, Atom, or Sublime. The first version doesn't need to worry about more complicated features like turtle graphics.

    The Emacs support was generously contributed by users, so I'm adding this issue with the help wanted label to ask for contributions for other editors. Just add a comment here, or start a new issue describing the editor you want to work on.

    You can find some general guidance in the contributing fiile.

    • [x] implement plugin
    • [x] adapt to space_tracer changes
    • [x] package the plugin
    • [x] publish in the marketplace
    • [x] update the developer docs for publishing a release
    • [x] test installing from the marketplace, after it is accepted
    • [x] update installation instructions to use the marketplace
    enhancement 
    opened by donkirkby 18
  • Add matplotlib support to PyCharm

    Add matplotlib support to PyCharm

    Would you be interested in adding support for matplotlib?

    Currently, examples using that library prints nothing.

    It would be neat if the matplotlib.figure.Figure called p below were shown in a buffer.

    import seaborn as sns
    sns.set(style="ticks")
    
    # Load the example dataset for Anscombe's quartet
    df = sns.load_dataset("anscombe")
    
    # Show the results of a linear regression within each dataset
    g = sns.lmplot(x="x", y="y", col="dataset", hue="dataset", data=df,
                   col_wrap=2, ci=None, palette="muted", size=4,
                   scatter_kws={"s": 50, "alpha": 1})#.getfig()
    
    p = g.fig
    

    Example from here: Anscombe’s quartet

    enhancement 
    opened by ghost 18
  • Incompatible with PyDev 2.7.5.

    Incompatible with PyDev 2.7.5.

    Environment: Windows XP 32-bit JRE SE 7 U21 10.21.2.11 Python 3.3.2 (that's CPython, not Iron Python, Jython, or a more exotic implementation) Eclipse Classic 4.2.2 PyDev 2.7.5.2013052819 live-py 2.5.0.201304211713

    Error: Live evaluation window does not appear. The menu entry itself /does/ appear, and responds to being checked/unchecked.

    Message from Error Log: "Plug-in live-py was unable to load class live_py.PyEditDecorator."

    Eclipse and PyDev itself appear to be functional (e.g. Python code completion works, as does live syntax checking, and executing valid code and viewing the output in the console).

    This occurs reliably.

    Downgrading the version of live-py to the previous version, and upgrading PyDev to the nightly version, did not change anything.

    Knowledge of any workarounds would be appreciated. I may have installed something wrong, but I followed the instructions as best I could.

    I attempted to report this bug before on the blog, but my posting was deleted for some reason. Since I had already deleted the installation of everything, I had to re-install just to get the information to resubmit the bug report here, once I found out how. I hope it won't be ignored or destroyed a second time.

    bug 
    opened by ghost 15
  • Incompatible with PyDev 2.7

    Incompatible with PyDev 2.7

    File->New->PyDev Project->demo->Finish

    Right click on demo project in PyDev Package Explorer,->New->File->demo.py Type code "s='hello'",but the code is shown as "'olleh'=s"(that is to say when you type a letter such as 's',the cursor automatically jump to begin of 's' ) and no result display.

    Tested with:

    Win7 32bit+python 2.7.3+eclipse 3.7,3,8 and 4.0+pydev.org/updates

    ubuntu 11.04+python 2.6.5+eclipse 3.7,3.8+pydev.org/updates

    Pydev 2.5, 2.6 works well with live-py_2.0.0.201209171018.jar, but Pydev 2.7 has the above bug with live-py_2.0.0.201209171018.jar.

    Note: this bug originally described a different problem with earlier versions of live-py.

    bug 
    opened by ubuntu0 14
  • add support for org babel source blocks

    add support for org babel source blocks

    What I did

    Edit a babel block in an org file (org-edit-special). This will open a second buffer with only the code in the block from where org-edit-special was invoked. In this new buffer enable live-py-mode.

    What happened

    the live buffer pops-up but it displays the following:

    ------------------------------------------------------------- |
    FileNotFoundError: [Errno 2] No such file or directory: 'Src' |
    ------------------------------------------------------------- |
    

    What I wanted to happen

    I expected live-py-mode not to require an actual file on disk but just a buffer to do its magic.

    My environment

    • Emacs 26.3
    • Ubuntu 18.04
    • Python 3.6.8
    • Org mode 9.1.9
    opened by ramestica 11
  • Control tracing with a decorator

    Control tracing with a decorator

    There are a couple of scenarios where it might be useful to change the tracing from within the code.

    1. If we add a command-line version of the code tracer, it could be used as a debugging tool. However, you'd probably only want to trace one or two methods instead of the whole file. We could use a decorator like PySnooper does to select which methods to trace. It might also be nice to be able to trace code without having to install one of the plugins. Tracing a couple of functions might also make sense if they are called within a large program. You could even call the command-line version with watch to update the trace whenever you save a file, so it's sort of like live coding without the IDE integration.
    2. Within one of the plugins, you might want to tell it not to trace some of the variables. Long variables like lists or strings can make loop displays harder to read.

    Here's an example:

    import code_tracer       | 
                             | 
                             | 
    @code_tracer.trace_code  | 
    def foo(n):              | n = 3 
        s = 'x'              | s = 'x' 
        for i in range(n):   | i = 0    | i = 1     | i = 2 
            s += 'y'         | s = 'xy' | s = 'xyy' | s = 'xyyy' 
        return s             | return 'xyyy' 
                             | 
                             | 
    def bar(n):              |
        s = 'a'              |
        for i in range(n):   |
            s += 'b'         |
                             | 
                             | 
    print(foo(3))            |
    print(bar(3))            |
    

    Possible features (probably move most to separate issues):

    • [x] Move Python files into a package, with a setup.py file.
    • [x] Mark a method to be the only section that gets traced.
    • [x] Replace first positional argument with --source: "file to read the traced module from, or - for stdin. Defaults to standard Python loading."
    • [x] Replace second positional argument with --trace_module: "module to display trace for. Defaults to __main__"
    • [x] Add --live option: "load main module as __live_coding__ instead of __main__."
    • [x] Refactor top level code tracer to simplify it.
    • [x] Fix alignment when @traced is used in the editor.
    • [x] Add --traced option to select module or method
    • [x] ~~Add --stdin option: "file to read stdin from, or - for normal stdin. Defaults to /dev/null."~~ moved to #238.
    • [x] ~~Add --stdout option: "file to write stdout to (not tracing), or - for normal stdout. Defaults to /dev/null."~~ moved to #238.
    • [x] ~~Add --stderr option: "file to write stderr to, or ! for normal stderr. Defaults to /dev/null."~~ moved to #238.
    • [x] ~~Add --report option: "file to write tracing to, or - for stdout, or ! for stderr. Defaults to -."~~ moved to #238.
    • [x] Replace --dump with --source_width option: "Width of source code - use 0 to hide or negative numbers to trim columns from the end, -1 to fit source code. Defaults to -1."
    • [x] Add --source_indent option: "Number of spaces to indent source code. Negative to skip first columns of source code. Defaults to 0."
    • [x] Add trace_width option: "number of columns to display, including source code. Use negative numbers to trim columns from the end, 0 for no limit." Defaults to display width? One less?
    • [x] ~~Add --trace_offset option: "number of columns to skip at start of tracing display."~~ moved to #239.
    • [x] ~~Add --hide option: "variable name to hide from display." Also allow hide parameter in decorator.~~ moved to #239.
    • [x] ~~Add --start_line and --end_line options: "first/last line to trace in trace_module." Also allow start_line and end_line parameters in decorator.~~ moved to #239.
    • [x] ~~Mark a section with a with block.~~ moved to #239.
    • [x] ~~Add --depth option: "trace the methods that the marked method calls, within the same file, up to the given depth."~~ moved to #240.
    • [x] --live and --traced=__live_coding__ are incompatible with Pyglet, because the __main__ module gets deleted?
    • [x] publish the package on pypi
    enhancement 
    opened by donkirkby 10
  • [EDIT] - code_tracer.py - Now monkey patching pyglet if it can be found.

    [EDIT] - code_tracer.py - Now monkey patching pyglet if it can be found.

    [NEW] - mock_pyglet.py - Class for monkey patching pyglet in traced code. Pyglet seems to have many entry points so it may be unrealistic to support everything. So far we patch Window and app.run which will service a simple hello world example.

    opened by Derfies 9
  • Fix incorrect window start position

    Fix incorrect window start position

    If the value of scroll-margin is not 0, the live buffer won't align with source code buffer properly.

    Wasn't sure whether to compensate for scroll-margin manually, so decided to set it to 0 locally for sake of simplicity.

    opened by cipharius 9
  • Does not work with Python Community Edition plugin in other Jetbrains IDEs

    Does not work with Python Community Edition plugin in other Jetbrains IDEs

    What I did

    1. Open CLion
    2. Create main.py
    3. Write some code, e.g. a = 1
    4. Run it normally
    5. Run it again by clicking "Start Live Coding"
    6. Try to add more code, e.g., b = 2

    What happened

    In the split window, line 1 shows created for main.py. After updating the code, nothing changes.

    What I wanted to happen

    Show variable names their values like how this plugin works in PyCharm.

    My environment

    • CLion 2020.3.3
    • Windows 10 Pro
    • Python 3.7.9

    Other feedbacks

    Change github issue template to use ## for section names, # is usually used as titles.

    opened by liurui39660 8
  • Add support for Doom Emacs

    Add support for Doom Emacs

    Hello and thanks for the awesome plugin. I am here to report that the live-py-mode does not work correctly with Doom Emacs. The cursor decides to jump to the live window even if I am in the insert mode (evil).

    What I did

    Any Python code would reproduce this. As an example:

    import os
    
    print(os.path.join('foo', 'bar')
    

    What happened

    The cursor jumps to the live-py-trace buffer while typing if you delay the typing for more than one second.

    What I wanted to happen

    Normal behavior as for Spacemacs or Vanilla Emacs.

    My environment

    Describe the versions of everything you were using:

    • Editor Doom Emacs
    • Operating system Linux Manjaro
    • Python 3.7

    Other feedback

    I love this mode and being able to utilize it using Doom Emacs would be highly appreciated.

    bug 
    opened by haditim 8
  • Scrolling up in code window causes output window to lag behind 1 line

    Scrolling up in code window causes output window to lag behind 1 line

    What I did

    Describe the steps you took, probably including your Python code, like this:

    • Created a Python script which had more lines than could fit in the window showing its buffer, let's say it could show 10 lines).
    • Activated Live Py Mode using M-x live-py-mode
    • In the code window:
      • Moved point (next-line) to the last line of the buffer, scrolling all the way down.
      • Moved point (previous-line) to the first visible line in the window.
      • Moved point up one more line (previous-line).
      • Finally, moved point down one line.
    print(21)
    
    print(42)
    
    print(21)
    
    print(42)
    
    print(21)
    
    print(42)
    
    print(21)
    
    print(42)
    
    print(21)
    
    print(42)
    
    print(21)
    
    print(42)
    
    

    What happened

    Describe what you saw, probably including the live coding display, like this:

    • After scrolling to the last line in the code window (! indicates position of point):
                                             |                                         
    print(42)                                |print('42')                              
                                             |                                         
    print(21)                                |print('21')                              
                                             |                                         
    print(42)                                |print('42')                              
                                             |                                         
    print(21)                                |print('21')                              
                                             |                                         
    print(42)                                |print('42')                              
                                             |                                         
    print(21)                                |print('21')                              
                                             |                                         
    print(42)                                |print('42')                              
                                             |                                         
    print(21)                                |print('21')                              
                                             |                                         
    print(42)                                |print('42')                              
                                             |                                         
    !                                        |!                                        
    -UU-:----F1  blub.py        Bot (25,0)   |-UUU:**--F1  *live-py-trace_blub.py_17080
    End of buffer
    
    • Right after moving point to the top line in the code window (! indicates position of point):
    !                                        |!                                         
    print(42)                                |print('42')                              
                                             |                                         
    print(21)                                |print('21')                              
                                             |                                         
    print(42)                                |print('42')                              
                                             |                                         
    print(21)                                |print('21')                              
                                             |                                         
    print(42)                                |print('42')                              
                                             |                                         
    print(21)                                |print('21')                              
                                             |                                         
    print(42)                                |print('42')                              
                                             |                                         
    print(21)                                |print('21')                              
                                             |                                         
    print(42)                                |print('42')                              
                                             |                                         
                                             |                                         
    -UU-:----F1  blub.py        Bot (6,0)    |-UUU:**--F1  *live-py-trace_blub.py_17080
    
    
    • Right after moving point up one more line (! indicates position of point, note: point no longer visible in output window):
    !print(21)                               |                                         
                                             |print('42')                              
    print(42)                                |                                         
                                             |print('21')                              
    print(21)                                |                                         
                                             |print('42')                              
    print(42)                                |                                         
                                             |print('21')                              
    print(21)                                |                                         
                                             |print('42')                              
    print(42)                                |                                         
                                             |print('21')                              
    print(21)                                |                                         
                                             |print('42')                              
    print(42)                                |                                         
                                             |print('21')                              
    print(21)                                |                                         
                                             |print('42')                              
    print(42)                                |                                         
                                             |                                         
    -UU-:----F1  blub.py        Bot (5,0)    |-UUU:**--F1  *live-py-trace_blub.py_17080
    
    

    What I wanted to happen

    Describe what you wanted, probably including changes to the live coding display, like this:

    • I would like the code and output windows to stay synchronized when scrolling up, and point in the output window to remain visible at all times, like this:
    !print(21)                               |!print('21')                              
                                             |                                         
    print(42)                                |print('42')                              
                                             |                                         
    print(21)                                |print('21')                              
                                             |                                         
    print(42)                                |print('42')                              
                                             |                                         
    print(21)                                |print('21')                              
                                             |                                         
    print(42)                                |print('42')                              
                                             |                                         
    print(21)                                |print('21')                              
                                             |                                         
    print(42)                                |print('42')                              
                                             |                                         
    print(21)                                |print('21')                              
                                             |                                         
    print(42)                                |print('42')                              
                                             |                                         
    -UU-:----F1  blub.py        Bot (5,0)    |-UUU:**--F1  *live-py-trace_blub.py_17080
    
    

    My environment

    Describe the versions of everything you were using:

    • Editor (PyCharm, Eclipse, or Emacs)
    $ emacs --version | head -n 1
    GNU Emacs 25.3.1
    
    • C-h P live-py-mode RET
    live-py-mode is an installed package.
    
         Status: Installed in ‘live-py-mode-20180129.2352/’ (unsigned). Delete
        Version: 20180129.2352
    [...]
    
    • Operating system
    • Void Linux (x86_64, glibc)
    • Python
    import sys                               |                                         
    ver = sys.version                        |ver = '3.6.4 (default, Dec 19 2017, 18:0$
    
    bug 
    opened by ackalker 8
  • Old code at startup

    Old code at startup

    What I did

    Started the live canvas in PyCharm.

    What happened

    It displayed an outdated canvas, what the code used to draw a few minutes before. Sometimes, the current file is out of date, and sometimes the driver file is out of date.

    Sometimes, it also scrolls to a different place in the source file. The top, I think.

    What I wanted to happen

    It should run the current code.

    Workaround: edit the current file, or press Ctrl+S.

    My environment

    Describe the versions of everything you were using:

    • PyCharm 2022.3
    • Live Coding 4.9.1
    • Ubuntu 20.04
    • Python 3.9
    opened by donkirkby 0
  • Exception in plugin Live Coding in Python (2.25.1)

    Exception in plugin Live Coding in Python (2.25.1)

    What I did

    Describe the steps you took, probably including your Python code, like this:

    - I installed the plugin in PHPStorm;
    - I opened a Python file and the error occured;
    
    

    What happened

    Describe what you saw, probably including the live coding display, like this:

    - PHPStorm displayed an error and because the plugin is not a product of Jetbrains, I was unable to submit the report. Here is the contents of 
    

    What I wanted to happen

    Describe what you wanted, probably including changes to the live coding display, like this:

    **What do you get when you multiply six by nine?** That would be 54
    
    Please see the attached files for errors and stacktrace (induced.txt and stacktrace.txt)
    

    My environment

    Describe the versions of everything you were using:

    • Editor: JetBrains PHPStorm Version 2022.2.3 Build #PS-222.4345.15, built on October 5, 2022

    • Live Coding plugin: Live Coding in Python 2.25.1

    • Operating system: Edition: Windows 10 Pro Version: 22H2 Installed on: 2022-‎09-‎22 ‎Thu OS build: 19045.2311 Experience: Windows Feature Experience Pack 120.2212.4190.0

    • Python

    Other feedback

    While you're here, we'd love to know how you learned about the project, what you use it for, or anything else you'd like to tell us.

    I just wanted something similar to Python Intellisense to assist with Python development.

    induced.txt stacktrace.txt.txt

    opened by wni5378 3
  • Compare smeared images

    Compare smeared images

    Writing visual unit tests to compare graphics code is powerful, but often brittle. Things like antialiasing can make the comparison unreliable.

    Adapt the smeared comparison from the four-letter blocks project, so that comparison will ignore minor changes in text or antialiasing, but will detect the wrong text, the wrong font, or other failures.

    • [ ] port the numpy image and smearing code
    • [ ] probably fail if numpy isn't installed, because the smear calculation will be very slow
    • [ ] increase the dtype size as the smear radius gets bigger?
    opened by donkirkby 0
  • File system in browser

    File system in browser

    Some ideas for how to use the file system in pyodide:

    • add a list of data files to load in the tutorial header
    • carry the same script through several editors in the same tutorial, with a hint about where to scroll to
    • edit module and test module, but run the test against the edited module
    opened by donkirkby 0
  • Add Pillow support

    Add Pillow support

    opened by donkirkby 0
  • Live image without alpha channel

    Live image without alpha channel

    What I did

    Tried to compare two images without alpha channels.

    from PIL import Image
    from space_tracer import LivePillowImage, LiveImageDiffer
    
    a = LivePillowImage(Image.new('RGB', (100, 100)))
    b = LivePillowImage(Image.new('RGB', (100, 100)))
    differ = LiveImageDiffer()
    differ.compare(a, b)
    

    What happened

    It complained about the missing alpha channel.

    /home/don/.local/share/virtualenvs/svg-turtle-7kVEgXjr/bin/python /home/don/.config/JetBrains/PyCharm2021.3/scratches/scratch.py
    Traceback (most recent call last):
      File "/home/don/.config/JetBrains/PyCharm2021.3/scratches/scratch.py", line 7, in <module>
        differ.compare(a, b)
      File "/home/don/.local/share/virtualenvs/svg-turtle-7kVEgXjr/lib/python3.9/site-packages/space_tracer/live_image.py", line 262, in compare
        diff_fill = self.compare_pixel(fill1, fill2, is_missing)
      File "/home/don/.local/share/virtualenvs/svg-turtle-7kVEgXjr/lib/python3.9/site-packages/space_tracer/live_image.py", line 334, in compare_pixel
        ar, ag, ab, aa = actual_pixel
    ValueError: not enough values to unpack (expected 4, got 3)
    

    What I wanted to happen

    Make the alpha channel default to 255, the same as changing the code sample above to use mode 'RGBA'.

    My environment

    Describe the versions of everything you were using:

    • space_tracer 4.7.0
    • Ubuntu 20.04
    • Python 3.9.9

    Analysis

    Add a helper function to pad pixels to four channels, and call it in compare_pixel(). Think about grayscale images, as well.

    bug good first issue 
    opened by donkirkby 0
Releases(v4.9.1)
  • v4.9.1(Nov 30, 2022)

    Mostly compatibility fixes for Python 3.11 (#500) and Matplotlib 3.5.2 (#480). Also fix alignment issue (#481) in PyCharm and some cosmetic improvements to browser tutorials (#363).

    For the full list of changes, see the milestone.

    4.9.1 is only a small fix for PyCharm, the other platforms are still on 4.9.0.

    Source code(tar.gz)
    Source code(zip)
  • v4.8.1(May 6, 2022)

    This is a browser-only release, adding a live tutorial for matplotlib and an advanced turtle tutorial about the Burkina Faso flag.

    • #345 add matplotlib to browser
    Source code(tar.gz)
    Source code(zip)
  • v4.8.0(Feb 8, 2022)

  • v4.7.0(Jan 4, 2022)

    The main feature for this release is #346, adding canvas goals to the browser version. The rest of the milestone is adding missing features to the MockTurtle class, such as:

    • #349 turtle history
    • #354 turtle shapes

    See the milestone for a complete list.

    Source code(tar.gz)
    Source code(zip)
  • v4.6.0(Dec 21, 2021)

    In the browser version, add turtle graphics (#261), and upgrade to Python 3.9 (#310).

    This release is only for the browser version, not PyCharm or Sublime Text.

    See the milestone for a list of issues.

    Source code(tar.gz)
    Source code(zip)
  • v4.5.1(Nov 7, 2021)

    Add features to display other images beyond turtle graphics and Matplotlib (#244), as well as visual unit tests (#284).

    See the milestone for a full list. The only change between 4.5.0 and 4.5.1 is a patch for the PyCharm framework (#337).

    Source code(tar.gz)
    Source code(zip)
  • v4.4.0(Apr 13, 2021)

  • v4.3.0(Jan 1, 2021)

    The main change is #289 to add support for Python 3.9, along with several improvements to selecting output lines in the command-line space tracer tool. See the milestone for a complete list.

    Source code(tar.gz)
    Source code(zip)
  • v4.2.0(Jul 10, 2020)

    There are several fixes for the PyCharm live turtle: #272 display errors, #273 bad fonts, and #274 add dot() method.

    • #277 Sublime Text scrolling is fixed.
    • #271 Show line numbers in space tracer.
    • #259 Support org babel code blocks in Emacs.

    See the milestone for the complete list of changes.

    Source code(tar.gz)
    Source code(zip)
  • v4.1.0(Apr 1, 2020)

    The main change in the release is bringing the browser version back (#235) after all the Python code moved into the space_tracer package.

    Other changes:

    • #262 Create a live tutorial in the browser.
    • #260 Check for PyCharm's pytest runner.
    • #249 Don't resize images in Sublime Text.
    • #239 Add more control of traced section.

    See the milestone for a complete list of changes.

    Source code(tar.gz)
    Source code(zip)
  • v4.0.1(Jan 26, 2020)

    The biggest change in this release is dropping support for Python 2 (#256). There is also support for driver scripts in Sublime Text (#236), and a bunch of bug fixes.

    • #257 and #247 - support Python 3.7 and 3.8 features, like the walrus operator
    • #254 - pytest doesn't load test code from editor
    • #255 - installing space_tracer from sdist

    See the milestone for a complete list.

    Source code(tar.gz)
    Source code(zip)
  • v3.0.3(Nov 1, 2019)

    Add a command-line version: space_tracer #223, as well as a SublimeText version #175.

    • #222 Add Pyglet support in live turtle mode.
    • #215 Redirect stdin from a file in PyCharm.
    • #251 Unit tests broken.

    See the milestone for a full list of changes. v3.0.2 and v3.0.3 are only for the SublimeText plugin.

    Source code(tar.gz)
    Source code(zip)
  • v2.25.1(Mar 30, 2019)

    Add synchronized scrolling to the browser version in #213, and fix PyCharm scrolling (again) in #216.

    Version 2.25.1 is a patch release of #224 for PyCharm: no changes to the other platforms.

    For a full list of changes, see the milestone.

    Source code(tar.gz)
    Source code(zip)
  • v2.24.0(Dec 14, 2018)

    The main features of this release are:

    • #207 Proof of concept with Pyodide to run live coding in a browser
    • #198 Report StringIO.write() on attributes
    • #177 First batch of full matplotlib lessons

    For the full list of issues, see the milestone.

    Source code(tar.gz)
    Source code(zip)
  • v2.23.2(Aug 11, 2018)

    Fix a couple of scrolling problems in PyCharm (#199 and #200). Compatibility fixes for Eclipse (#202) and matplotlib with Python 2 (#195). Minor display improvements (#197 and #203).

    See the full list in the milestone.

    Source code(tar.gz)
    Source code(zip)
  • v2.22.0(Mar 31, 2018)

  • v2.21.1(Feb 1, 2018)

  • v2.21.0(Jan 27, 2018)

  • v2.20.1(Jan 5, 2018)

  • v2.20.0(Dec 21, 2017)

    Main feature is #152, PyCharm support for live turtle graphics.

    • Show pass/fail in PyCharm: #151.
    • Rewrite printing to include direct writes to stdout/stderr for #160 and #162.
    • Major rewrite of module importing for #159.
    • Other minor improvements to PyCharm.

    See the milestone for a full list.

    Source code(tar.gz)
    Source code(zip)
  • v2.19.2(Dec 2, 2017)

  • v2.19.1(Nov 14, 2017)

    There was a bug in the previous release, and it was easier to just finish #155 by switching to using an Alarm object.

    This version is only releasing for PyCharm.

    Source code(tar.gz)
    Source code(zip)
  • v2.19.0(Nov 10, 2017)

    The main fix is for #149: the lag while typing in PyCharm.

    Other changes:

    • #147 - lambda expressions
    • #150 - support other types of driver script in PyCharm

    See the milestone for a full list.

    Source code(tar.gz)
    Source code(zip)
  • v2.18.1(Oct 20, 2017)

  • v2.18.0(Oct 13, 2017)

  • v2.17.0(Sep 16, 2017)

    Main fixes are #132 and #133 to improve the launch of live coding in PyCharm and #126 to fix the broken navigation in PyCharm.

    • #129 Eclipse buttons now update status correctly.
    • #134 Keep horizontal scroll position in Emacs.
    • #125 Report items from yield from.

    See the milestone for a full list of changes.

    Source code(tar.gz)
    Source code(zip)
  • v2.16.0(Jun 9, 2017)

    Add start and stop buttons to the PyCharm plugin, as well as publishing it in the repository. See the milestone for the full list of changes.

    Most of the changes were for the PyCharm and Emacs versions, so I didn't publish a release for the Eclipse version.

    Source code(tar.gz)
    Source code(zip)
  • v2.15.0(Apr 18, 2017)

    Make emacs display more robust to switching buffers and improve file handling. Also display success or failure to make it easier to work on unit tests.

    See the milestone for a full list of other small improvements.

    Source code(tar.gz)
    Source code(zip)
  • v2.14.0(Jan 26, 2017)

  • v2.13.0(Nov 27, 2016)

Python 3 patcher for Sublime Text v4107-4114 Windows x64

sublime-text-4-patcher Python 3 patcher for Sublime Text v4107-4114 Windows x64 Credits for signatures and patching logic goes to https://github.com/l

null 187 Dec 27, 2022
Shows Odin Lang errors in Sublime Text.

OdinErrors Shows Odin Lang errors in Sublime Text. Config Collections and defines are stored in ols.json (Hijacked from ols). { "collections": [

Gus 3 Nov 20, 2021
Integrate clang-format with Sublime Text

Sublime Text Clang Format Plugin This is a minimal plugin integrating clang-format with Sublime Text, with emphasis on the word minimal. It is not rea

Jon Palmisciano 1 Dec 17, 2021
A Python code editor that looks like GNU Emacs.

?? WARNING ?? : Under development... Testing is not recommended! Welcome to Snake Editor! Hi! This is our repository, we are here to present our new p

Marcio Dantas 5 May 20, 2022
Launch a ready-to-code Wagtail Live development environment with a single click.

Wagtail Live Gitpod Launch a ready-to-code Wagtail Live development environment with a single click. Steps: Click the Open in Gitpod button. Relax: a

Coen van der Kamp 6 Oct 29, 2021
Wasm powered Jupyter running in the browser 💡

JupyterLite JupyterLite is a JupyterLab distribution that runs entirely in the browser built from the ground-up using JupyterLab components and extens

JupyterLite 3k Jan 4, 2023
VSCode extension to sort and refactor python imports using reorder-python-imports.

reorder-python-imports VSCode extension to sort and refactor python imports using reorder-python-imports. Unlike other import organizers, reorder-pyth

Ryan Butler 3 Aug 26, 2022
Python Indent - Correct python indentation in Visual Studio Code.

Python Indent Correct python indentation in Visual Studio Code. See the extension on the VSCode Marketplace and its source code on GitHub. Please cons

Kevin Rose 57 Dec 15, 2022
Spyder - The Scientific Python Development Environment

Spyder is a powerful scientific environment written in Python, for Python, and designed by and for scientists, engineers and data analysts. It offers a unique combination of the advanced editing, analysis, debugging, and profiling functionality of a comprehensive development tool with the data exploration, interactive execution, deep inspection, and beautiful visualization capabilities of a scientific package.

Spyder IDE 7.3k Jan 8, 2023
Gaphor is a UML and SysML modeling application written in Python.

Gaphor is a UML and SysML modeling application written in Python. It is designed to be easy to use, while still being powerful. Gaphor implements a fully-compliant UML 2 data model, so it is much more than a picture drawing tool. You can use Gaphor to quickly visualize different aspects of a system as well as create complete, highly complex models.

Gaphor 1.3k Jan 7, 2023
notebookJS: seamless JavaScript integration in Python Notebooks

notebookJS enables the execution of custom JavaScript code in Python Notebooks (Jupyter Notebook and Google Colab). This Python library can be useful for implementing and reusing interactive Data Visualizations in the Notebook environment.

jorgehpo 146 Dec 7, 2022
Mu - A Simple Python Code Editor

A small, simple editor for beginner Python programmers. Written in Python and Qt5.

Mu 1.2k Jan 3, 2023
A GitHub Action hosted Python IDE!

What is this ? This is an IDE running on GitHub Actions which can help in..... Running small snippets. Running codes whenever PC is not available and

Jainam Oswal 21 Nov 9, 2022
Python IDE or notebook to generate a basic Kepler.gl data visualization

geospatial-data-analysis [readme] Use this code in your Python IDE or notebook to generate a basic Kepler.gl data visualization, without pre-configura

null 2 Sep 5, 2022
This is code for IDLE python/ Magic8Ball Code

Magic8Ball this is code for IDLE python/ Magic8Ball Code this code is for beginers i hope you can learn code form this don't ever be a script kiddie a

null 1 Nov 5, 2021
cottonformation is a Python tool providing best development experience and highest productivity

Welcome to cottonformation Documentation Full Documentatioin Here cottonformation is a Python tool providing best development experience and highest p

Sanhe 6 Jul 8, 2022
An amazing simple Python IDE for developers!

PyHub An amazing simple Python IDE for developers! Get ready to compile and run your code in the most simplest and easiest IDE of the ancient world! T

Aniket Bhattacharjee 2 Dec 31, 2022
A Sublime Text package that allows a user to view all the available core/plugin commands for Sublime Text and Sublime Merge, along with their documentation/source.

CommandsBrowser A Sublime Text package that allows a user to view all the available core/plugin commands for Sublime Text and Sublime Merge, along wit

Sublime Instincts 26 Nov 15, 2022
Fully Automated YouTube Channel ▶️with Added Extra Features.

Fully Automated Youtube Channel ▒█▀▀█ █▀▀█ ▀▀█▀▀ ▀▀█▀▀ █░░█ █▀▀▄ █▀▀ █▀▀█ ▒█▀▀▄ █░░█ ░░█░░ ░▒█░░ █░░█ █▀▀▄ █▀▀ █▄▄▀ ▒█▄▄█ ▀▀▀▀ ░░▀░░ ░▒█░░ ░▀▀▀ ▀▀▀░

sam-sepiol 249 Jan 2, 2023