A better Python REPL

Related tags

Interpreter ptpython
Overview

ptpython

Build Status Latest Version License

A better Python REPL

pip install ptpython

https://github.com/jonathanslenders/ptpython/raw/master/docs/images/example1.png

Ptpython is an advanced Python REPL. It should work on all Python versions from 2.6 up to 3.9 and work cross platform (Linux, BSD, OS X and Windows).

Note: this version of ptpython requires at least Python 3.6. Install ptpython 2.0.5 for older Python versions.

Installation

Install it using pip:

pip install ptpython

Start it by typing ptpython.

Features

  • Syntax highlighting.
  • Multiline editing (the up arrow works).
  • Autocompletion.
  • Mouse support. [1]
  • Support for color schemes.
  • Support for bracketed paste [2].
  • Both Vi and Emacs key bindings.
  • Support for double width (Chinese) characters.
  • ... and many other things.

[1] Disabled by default. (Enable in the menu.)

[2] If the terminal supports it (most terminals do), this allows pasting without going into paste mode. It will keep the indentation.

__pt_repr__: A nicer repr with colors

When classes implement a __pt_repr__ method, this will be used instead of __repr__ for printing. Any prompt_toolkit "formatted text" can be returned from here. In order to avoid writing a __repr__ as well, the ptpython.utils.ptrepr_to_repr decorator can be applied. For instance:

from ptpython.utils import ptrepr_to_repr
from prompt_toolkit.formatted_text import HTML

@ptrepr_to_repr
class MyClass:
    def __pt_repr__(self):
        return HTML('<yellow>Hello world!</yellow>')

More screenshots

The configuration menu:

https://github.com/jonathanslenders/ptpython/raw/master/docs/images/ptpython-menu.png

The history page and its help:

https://github.com/jonathanslenders/ptpython/raw/master/docs/images/ptpython-history-help.png

Autocompletion:

https://github.com/jonathanslenders/ptpython/raw/master/docs/images/file-completion.png

Embedding the REPL

Embedding the REPL in any Python application is easy:

from ptpython.repl import embed
embed(globals(), locals())

You can make ptpython your default Python REPL by creating a PYTHONSTARTUP file containing code like this:

import sys
try:
    from ptpython.repl import embed
except ImportError:
    print("ptpython is not available: falling back to standard prompt")
else:
    sys.exit(embed(globals(), locals()))

Multiline editing

Multi-line editing mode will automatically turn on when you press enter after a colon.

To execute the input in multi-line mode, you can either press Alt+Enter, or Esc followed by Enter. (If you want the first to work in the OS X terminal, you have to check the "Use option as meta key" checkbox in your terminal settings. For iTerm2, you have to check "Left option acts as +Esc" in the options.)

https://github.com/jonathanslenders/ptpython/raw/master/docs/images/multiline.png

Syntax validation

Before execution, ptpython will see whether the input is syntactically correct Python code. If not, it will show a warning, and move the cursor to the error.

https://github.com/jonathanslenders/ptpython/raw/master/docs/images/validation.png

Additional features

Running system commands: Press Meta-! in Emacs mode or just ! in Vi navigation mode to see the "Shell command" prompt. There you can enter system commands without leaving the REPL.

Selecting text: Press Control+Space in Emacs mode or V (major V) in Vi navigation mode.

Configuration

It is possible to create a config.py file to customize configuration. ptpython will look in an appropriate platform-specific directory via appdirs <https://pypi.org/project/appdirs/>. See the appdirs documentation for the precise location for your platform. A PTPYTHON_CONFIG_HOME environment variable, if set, can also be used to explicitly override where configuration is looked for.

Have a look at this example to see what is possible: config.py

IPython support

Run ptipython (prompt_toolkit - IPython), to get a nice interactive shell with all the power that IPython has to offer, like magic functions and shell integration. Make sure that IPython has been installed. (pip install ipython)

https://github.com/jonathanslenders/ptpython/raw/master/docs/images/ipython.png

This is also available for embedding:

from ptpython.ipython.repl import embed
embed(globals(), locals())

Django support

django-extensions has a shell_plus management command. When ptpython has been installed, it will by default use ptpython or ptipython.

PDB

There is an experimental PDB replacement: ptpdb.

Windows support

prompt_toolkit and ptpython works better on Linux and OS X than on Windows. Some things might not work, but it is usable:

https://github.com/jonathanslenders/ptpython/raw/master/docs/images/windows.png

FAQ

Q: The Ctrl-S forward search doesn't work and freezes my terminal.

A: Try to run stty -ixon in your terminal to disable flow control.

Q: The Meta-key doesn't work.

A: For some terminals you have to enable the Alt-key to act as meta key, but you can also type Escape before any key instead.

Alternatives

If you find another alternative, you can create an issue and we'll list it here. If you find a nice feature somewhere that is missing in ptpython, also create a GitHub issue and maybe we'll implement it.

Special thanks to

Comments
  • Make ptipython respect more config changes

    Make ptipython respect more config changes

    Currently ptipython loads extension modules, but does not execute lines from the config file.

    For example, I was trying to initialize the autoreload app from ipython, c.InteractiveShellApp.extensions = ['autoreload'] c.InteractiveShellApp.exec_lines = ['%autoreload 2'] c.InteractiveShellApp.exec_lines.append('print("Warning: disable autoreload in ipython_config.py to improve performance.")')

    The first line worked, while the other two were ignored.

    This allows ipython configuration to support use cases mentioned in: https://github.com/jonathanslenders/ptpython/issues/36 https://github.com/jonathanslenders/ptpython/issues/65

    I'm sure there are a lot more cases where the ptipython interface is slightly different from the ipython one, but I'm not sure what the plan for convergence is, so for now I tried to follow around the same pattern as initialize_extensions.

    opened by shanechin 13
  • Custom Dynamic Prompt with PtPython

    Custom Dynamic Prompt with PtPython

    Hello Jonathan,

    Would it be possible to have a feature where an embedded PtPython instance can actively "listen" to a variable from where the instance was created, and then alter the prompt's output based on that variables changing values? I have an instance of a class in the "if name == 'main''" section of the module when it is being run in interpreted mode, and the user can alter some of its attributes by typing in certain commands or functions. I would like to dynamically change the prompt to display what the current value of those instance attributes are. The attributes whose values have to be displayed in the prompt are known in advance. Please let me know if this is possible with the current PtPython.

    Thank you, Robert Valencia

    enhancement 
    opened by valencra 12
  • Proposal: Pin `jedi>=0.9.0,<=0.10.2'` due to regression in `0.11.0`

    Proposal: Pin `jedi>=0.9.0,<=0.10.2'` due to regression in `0.11.0`

    Proposal

    https://github.com/jonathanslenders/ptpython/blob/da2c5281f60c2d8a92749709219771ffaa84220f/setup.py#L24

    Change this to either:

    • jedi>=0.9.0,<=0.10.2',
    • 'jedi>=0.9.0,<0.11.0',

    This resolves the issues explained below.

    Also resolves #229.

    Description of problems

    Encountered a crash when typing the period of Revision., a django-reversion model:

    In [1]: Revision.Exception in thread Thread-429:
    Traceback (most recent call last):
      File ".../.pyenv/versions/Django_v2.0.x/lib/python3.6/site-packages/jedi/cache.py", line 46, in wrapper
        return getattr(self, name)
    AttributeError: 'MixedName' object has no attribute '_infer'
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File ".../.pyenv/versions/Django_v2.0.x/lib/python3.6/site-packages/jedi/evaluate/compiled/access.py", line 120, in wrapper
        cache[key]
    KeyError: 140232415539440
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File ".../.pyenv/versions/3.6.4/lib/python3.6/threading.py", line 916, in _bootstrap_inner
        self.run()
      File ".../.pyenv/versions/3.6.4/lib/python3.6/threading.py", line 864, in run
        self._target(*self._args, **self._kwargs)
      File ".../.pyenv/versions/Django_v2.0.x/lib/python3.6/site-packages/prompt_toolkit/interface.py", line 865, in run
        completions = list(buffer.completer.get_completions(document, complete_event))
      File ".../.pyenv/versions/Django_v2.0.x/lib/python3.6/site-packages/prompt_toolkit/contrib/regular_languages/completion.py", line 37, in get_completions
        self._get_completions_for_match(m, complete_event))
      File ".../.pyenv/versions/Django_v2.0.x/lib/python3.6/site-packages/prompt_toolkit/contrib/regular_languages/completion.py", line 81, in _remove_duplicates
        for i in items:
      File ".../.pyenv/versions/Django_v2.0.x/lib/python3.6/site-packages/prompt_toolkit/contrib/regular_languages/completion.py", line 64, in _get_completions_for_match
        for completion in completer.get_completions(document, complete_event):
      File ".../.pyenv/versions/Django_v2.0.x/lib/python3.6/site-packages/ptpython/completer.py", line 127, in get_completions
        completions = script.completions()
      File ".../.pyenv/versions/Django_v2.0.x/lib/python3.6/site-packages/jedi/api/__init__.py", line 174, in completions
        completions = completion.completions()
      File ".../.pyenv/versions/Django_v2.0.x/lib/python3.6/site-packages/jedi/api/completion.py", line 102, in completions
        return sorted(completions, key=lambda x: (x.name.startswith('__'),
      File ".../.pyenv/versions/Django_v2.0.x/lib/python3.6/site-packages/jedi/api/completion.py", line 43, in filter_names
        k = (new.name, new.complete)  # key
      File ".../.pyenv/versions/Django_v2.0.x/lib/python3.6/site-packages/jedi/api/classes.py", line 436, in complete
        return self._complete(True)
      File ".../.pyenv/versions/Django_v2.0.x/lib/python3.6/site-packages/jedi/api/classes.py", line 406, in _complete
        if self._name.api_type == 'param' and self._stack is not None:
      File ".../.pyenv/versions/Django_v2.0.x/lib/python3.6/site-packages/jedi/evaluate/compiled/mixed.py", line 90, in api_type
        return next(iter(self.infer())).api_type
      File ".../.pyenv/versions/Django_v2.0.x/lib/python3.6/site-packages/jedi/cache.py", line 48, in wrapper
        result = func(self)
      File ".../.pyenv/versions/Django_v2.0.x/lib/python3.6/site-packages/jedi/evaluate/compiled/mixed.py", line 85, in infer
        _create(self._evaluator, access_handle, parent_context=self.parent_context)
      File ".../.pyenv/versions/Django_v2.0.x/lib/python3.6/site-packages/jedi/evaluate/compiled/access.py", line 125, in wrapper
        result = func(evaluator, obj, parent_context)
      File ".../.pyenv/versions/Django_v2.0.x/lib/python3.6/site-packages/jedi/evaluate/compiled/mixed.py", line 205, in _create
        result = _find_syntax_node_name(evaluator, access_handle)
      File ".../.pyenv/versions/Django_v2.0.x/lib/python3.6/site-packages/jedi/evaluate/compiled/mixed.py", line 197, in _find_syntax_node_name
        return module_node, names[-1].parent, path, code_lines
    IndexError: list index out of range
    
    • While looking for a solution, found issue #229 with a similar traceback

    After restarting shell_plus, found further problems with both autocomplete and the documentation popup while typing User.objects.get(pk=1):

    • Autocomplete problem
      • Autocomplete is displayed after User.
      • But not working after User.objects.
    • Documentation popup
      • Not displayed at User.objects.get(

    Solution: Downgrading jedi to 0.10.2

    It was obvious that this must have been working at some point in history, so worked through the release history installing previous versions of jedi. Once I got to 0.10.2, everything mentioned above started working properly.

    opened by myii 11
  • support XDG spec

    support XDG spec

    please use appdirs to not pollute my $HOME with a .ptpython directory.

    with dirs = AppDirs('ptpython', 'Jonathan Slenders'), your stuff should go into dirs.user_data_dir, dirs.user_config_dir, and dirs.user_cache_dir

    enhancement 
    opened by flying-sheep 11
  • Can't import modules anymore

    Can't import modules anymore

    I can't import any modules from within my project (venv). I just get a "No module named" error. This was all working fine a few hours ago... since then I've changed nothing (intentional).

    However, importing modules from within the standard Python shell works still fine.

    This issue now happens in every project.

    I'm using ptpython version 0.41 and Python 3.6.5

    Any idea on this?

    edit: Seems to be related to #246

    opened by r6203 10
  • Not adding current directory to sys.path

    Not adding current directory to sys.path

    I can't work out why some instances of ptpython add the current directory to sys.path. Most of my projects to date, using 0.41, do this with no issues, but in recent installations I've noticed that it is missing from sys.path. Is there a condition for this I'm missing? I can't do basic imports. Stock python (3.6.4) interpreter and bpython - as a quick check - add the current directory without an issue. Tested in a variety of virtualenvs. $PYTHONPATH not set. Thanks.

    opened by yulqen 10
  • implement XDG Base Directory specification

    implement XDG Base Directory specification

    I accidentally deleted the fork I had for #183, so I'm recreating it.

    • Use the appdirs module.
    • Print a warning if the legacy ~/.ptpython directory is detected.
    • Resolves #63.
    • Resolves #132.
    opened by carlwgeorge 10
  • is it possible to change the color style?

    is it possible to change the color style?

    Hi,

    I see there is PythonStyle class at style.py. For my dark background, the color style is not very readable.

    Is there a simple way to configure that? I can try a monkey patch but...well...

    Thanks, Damien

    enhancement 
    opened by garaud 10
  • `ValueError: I/O operation on closed file` when I exit REPL

    `ValueError: I/O operation on closed file` when I exit REPL

    $ python -V
    Python 3.8.8
    $ ptpython --version
    3.0.18
    $ ptpython
    >>> exit()
    
    Traceback (most recent call last):
      File "/home/eggplants/.pyenv/versions/3.8.8/bin/ptpython", line 8, in <module>
        sys.exit(run())
      File "/home/eggplants/.pyenv/versions/3.8.8/lib/python3.8/site-packages/ptpython/entry_points/run_ptpython.py", line 207, in run
        embed(
      File "/home/eggplants/.pyenv/versions/3.8.8/lib/python3.8/site-packages/ptpython/repl.py", line 720, in embed
        repl.run()
      File "/home/eggplants/.pyenv/versions/3.8.8/lib/python3.8/site-packages/ptpython/repl.py", line 135, in run
        text = self.read()
      File "/home/eggplants/.pyenv/versions/3.8.8/lib/python3.8/site-packages/ptpython/python_input.py", line 1045, in read
        result = self.app.run(pre_run=pre_run, in_thread=True)
      File "/home/eggplants/.pyenv/versions/3.8.8/lib/python3.8/site-packages/prompt_toolkit/application/application.py", line 874, in run
        raise exception
      File "/home/eggplants/.pyenv/versions/3.8.8/lib/python3.8/site-packages/prompt_toolkit/application/application.py", line 855, in run_in_thread
        result = self.run(
      File "/home/eggplants/.pyenv/versions/3.8.8/lib/python3.8/site-packages/prompt_toolkit/application/application.py", line 891, in run
        return loop.run_until_complete(
      File "/home/eggplants/.pyenv/versions/3.8.8/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
        return future.result()
      File "/home/eggplants/.pyenv/versions/3.8.8/lib/python3.8/site-packages/prompt_toolkit/application/application.py", line 816, in run_async
        return await _run_async2()
      File "/home/eggplants/.pyenv/versions/3.8.8/lib/python3.8/site-packages/prompt_toolkit/application/application.py", line 792, in _run_async2
        result = await _run_async()
      File "/home/eggplants/.pyenv/versions/3.8.8/lib/python3.8/site-packages/prompt_toolkit/application/application.py", line 721, in _run_async
        with self.input.raw_mode(), self.input.attach(
      File "/home/eggplants/.pyenv/versions/3.8.8/lib/python3.8/site-packages/prompt_toolkit/input/vt100.py", line 129, in raw_mode
        return raw_mode(self.stdin.fileno())
    ValueError: I/O operation on closed file
    
    opened by eggplants 9
  • New version has import errors

    New version has import errors

    Hey there, I'm super excited about the new version of both prompt_toolkit and ptpython. I just installed the newest versions of both, as well as iPython (pip list shows prompt_toolkit==2.0.5, ptpython==2.0.1, ipython==7.0.1). Upon trying to launch ptpython I get various import errors:

    ImportError: cannot import name 'PathCompleter' from 'prompt_toolkit.contrib.completers' since https://github.com/jonathanslenders/ptpython/blob/6c0b99ea2b4be963b42c1062b2f33880ba30b6d3/ptpython/ipython.py#L14 is still using the old path for PathCompleter and WordCompleter, and fixing that raises an issue with https://github.com/jonathanslenders/ptpython/blob/9b61c9941bd4a5dff61c7bbb03172b0a515ee83b/ptpython/ipython.py#L19 since CommandLineInterface has been removed.

    Is there a newer version of this file which supports prompt_toolkit 2.0?

    bug 
    opened by afrieder 9
  • Colors are rendered incorrectly

    Colors are rendered incorrectly

    I modify colos in the config.py so that they match the colors of base16-monokai which I use in all of my environment. However, I noticed that some of the color values are shown differently from the way they are shown for any other (shell) program or even in the same shell outside of ptipython. Thus, it seems to me that color values are modified incorrectly somewhere albeit I don't really know what the reason is.

    colors

    In this example blue and green show up correctly (folder color in shell - command color in ptipython; command color in shell - "In [1]" color in ptipython). However, the color in the type signature which looks like light red/pink has the same color value and thus should look the same way as the yellow user/host line in the shell ("cutuchiqueno … sputnik3arch)

    The same happens with some other but not all colors.

    bug 
    opened by Cutuchiqueno 9
  • No option in config.py to set Reformat output or Enable pager

    No option in config.py to set Reformat output or Enable pager

    In the example config.py file: https://github.com/prompt-toolkit/ptpython/blob/master/examples/ptpython_config/config.py

    I don't see options to set the following ptpython menu options:

    1. Reformat output (black): On/Off
    2. Enable pager for output: On/Off
    opened by sockduct 0
  • {ptpython.ptipython}.embed() should load ptpython config by default

    {ptpython.ptipython}.embed() should load ptpython config by default

    When running ptpython.ipython.embed() or ptpython.repl import embed(), configs and history are not loaded -- it just uses the default config. It is not an intuitive behavior because when ~/.config/ptpython/config.py exists. Currently the config file is readed and applied ONLY when running as the entry-point program (e.g. python -m ptpython or python -m pypython.entry_points.run_ptipython.

    In order to make the config loaded, at this moment one should explicitly set configure=...:

    from ptpython.ipython import embed
    from ptpython.repl import run_config
    from ptpython.run_ptpython import get_config_and_history_file
    
    # NOTE: should use get_config_and_history_file to respect 
    # $PTPYTHON_CONFIG_HOME and platform-dependent directories,
    # but this requires a refactoring to make the function reusable
    # Note that some people might be using a different config file path
    config_file = os.path.expanduser("~/.config/ptpython/config.py")
    
    embed(..., configure=lamdda repl: run_config(repl, config_file))
    

    which is too verbose; reading ptpython config files should be the default behavior. The current implementation (and #126) may read some config files from ~/.ipython/profile_default, but not the ptpython config itself.

    What I suggest is to move the logic of reading and loading ptpython config into embed() and read the config instead of using the default config. This should be a straightforward fix, but @jonathanslenders do you have any opinions or is there something that I might have missed?

    opened by wookayin 0
  • ui_colorscheme: pygments.prompt-num and pygments.out-prompt have no effects

    ui_colorscheme: pygments.prompt-num and pygments.out-prompt have no effects

    screenshot:

    image

    ptpython config:

        repl.install_ui_colorscheme("my-colorscheme", custom_ui_colorscheme)
        repl.use_ui_colorscheme("my-colorscheme")
    
    from ptpython.style import default_ui_style
    custom_ui_colorscheme = Style.from_dict({
        **default_ui_style, 
        "pygments.prompt": "cyan",              # OK
        "pygments.prompt-num": "cyan bold",     # no effects
        "pygments.out-prompt": "cyan",          # no effects
        "pygments.out-prompt-num": "cyan blue", # no effects
    })
    

    You can see the number (e.g. 1) in the input prompt has a normal white color, and the out prompt has a red color despite the config.

    Note that those pygments.* style comes from https://github.com/prompt-toolkit/ptpython/blob/master/ptpython/ipython.py#L200-L207 which I'm trying to override. This problem exists even with the default ui colorscheme.

    • ptpython == 3.0.20
    • pygments == 2.13.0
    opened by wookayin 1
  • [Feature Request] Add timeoutlen option (or disable/set a small value)

    [Feature Request] Add timeoutlen option (or disable/set a small value)

    About timeouts in prompt_toolkit: https://python-prompt-toolkit.readthedocs.io/en/master/pages/advanced_topics/key_bindings.html#timeouts

    This is similar to timeoutlen in vim, which changes the time to wait for the rest of the key combination after, for example, Escape key.

    This affects at least vi mode, and closing the menu (#380). The current behavior is switching from insert mode to navigation mode, and closing the menu will happen after about 1 second the escape key is pressed, which is too long. Either make it configurable, or make it small (e.g., 0.03s or 30ms) both works for most people.

    Or easy workaround is also welcome.

    opened by oliverlew 1
  • Class property is called by ptpython before I call it

    Class property is called by ptpython before I call it

    >>> class My:
    ...     def __init__(self):
    ...         self._value = 3
    ...     @property
    ...     def value(self):
    ...         print('run value')
    ...         return self._value
    >>> 
    >>> my = My()
    >>> my.
    

    Right after I typed the dot, the property my.value is called. I added the print to show this. When I first had this issue in real code, the property did not have printout yet it set some private values on self, leading to mysterious behavior.

    Python's buildin console does not have this problem.

    ptpython 3.0.21 running in ubuntu 20.04 Docker container with Python 3.8.10.

    opened by zpz 0
Owner
prompt-toolkit
Tools for building command line applications in Python
prompt-toolkit
Visualize tensors in a plain Python REPL using Sparklines

Visualize tensors in a plain Python REPL using Sparklines

Shawn Presser 43 Sep 3, 2022
A cool little repl-based simulation written in Python

A cool little repl-based simulation written in Python planned to integrate machine-learning into itself to have AI battle to the death before your eye

Em 6 Sep 17, 2022
Calc.py - A powerful Python REPL calculator

Calc - A powerful Python REPL calculator This is a calculator with a complex sou

Alejandro 8 Oct 22, 2022
Basic Clojure REPL for Sublime Text

Basic Clojure REPL for Sublime Text Goals: Decomplected: just REPL, nothing more Zero dependencies: works directly with pREPL Compact: Display code ev

Nikita Prokopov 23 Dec 24, 2021
a simple REPL display lib for circuitpython

Circuitpython-termio-lib a simple REPL display lib for circuitpython Fonctions cls clear terminal screen and set cursor on top left : coords 0,0 usage

BeBoXoS 1 Nov 17, 2021
Implements a polyglot REPL which supports multiple languages and shared meta-object protocol scope between REPLs.

MetaCall Polyglot REPL Description This repository implements a Polyglot REPL which shares the state of the meta-object protocol between the REPLs. Us

MetaCall 10 Dec 28, 2022
Replite - An embeddable REPL powered by JupyterLite

replite An embeddable REPL, powered by JupyterLite. Usage To embed the code cons

Jeremy Tuloup 47 Nov 9, 2022
Better dates & times for Python

Arrow: Better dates & times for Python Arrow is a Python library that offers a sensible and human-friendly approach to creating, manipulating, formatt

Arrow 8.2k Jan 5, 2023
Better directory iterator and faster os.walk(), now in the Python 3.5 stdlib

scandir, a better directory iterator and faster os.walk() scandir() is a directory iteration function like os.listdir(), except that instead of return

Ben Hoyt 506 Dec 29, 2022
Python and tab completion, better together.

argcomplete - Bash tab completion for argparse Tab complete all the things! Argcomplete provides easy, extensible command line tab completion of argum

Andrey Kislyuk 1.1k Jan 8, 2023
Code examples for my Write Better Python Code series on YouTube.

Write Better Python Code This repository contains the code examples used in my Write Better Python Code series published on YouTube: https:/

null 858 Dec 29, 2022
Daily knowledge pills to get better in Python.

Python daily pills Daily knowledge pills to get better Python code. Why Does your Python code suffers of any of this symptoms? Incorrect Indentation I

Jeferson Vaz dos Santos 35 Sep 19, 2022
A discord Server Bot made with Python, This bot helps people feel better by inspiring them with motivational quotes or by responding with a great message, also the users of the server can create custom messages by telling the bot with Commands.

A discord Server Bot made with Python, This bot helps people feel better by inspiring them with motivational quotes or by responding with a great message, also the users of the server can create custom messages by telling the bot with Commands.

Aran 1 Oct 13, 2021
Arxiv2Kindle is a simple script written in python that converts LaTeX source downloaded from Arxiv and recompiles it to better fit a Kindle or other similar reading devices.

Arxiv2Kindle is a simple script written in python that converts LaTeX source downloaded from Arxiv and recompiles it to better fit a read

Soumik Rakshit 8 Jul 9, 2022
A multipurpose bot designed to make Discord better for everyone, written in Python.

Hadum A multipurpose bot that makes Discord better for everyone Features A Fully Functional Moderation component: manage your staff, members and permi

null 1 Jan 25, 2022
Little tool in python to watch anime from the terminal (the better way to watch anime)

ani-cli Script working again :), thanks to the fork by Dink4n for the alternative approach to by pass the captcha on gogoanime A cli to browse and wat

Harshith 4.5k Dec 31, 2022
Little tool in python to watch anime from the terminal (the better way to watch anime)

anipy-cli Little tool in python to watch anime from the terminal (the better way to watch anime) Has a resume playback function when picking from Hist

sdao 97 Dec 29, 2022
iso6.9 is a Discord bot written in Python and is used to make your Discord experience better

iso6.9-2.6stable (debloated) iso.bot is originally made by notsniped#4573. This is a remix of iso.bot by αrchιshα#5518. iso6.9 is a Discord bot writte

Kamilla Youver 2 Jun 10, 2022
Neighbourhood - A python-django web app to help the residence of a given neighborhood know their surrounding better

Neighbourhood A python-django web app to help the residence of a given neighborh

Levy Omolo 4 Aug 25, 2022
Distributed Asynchronous Hyperparameter Optimization better than HyperOpt.

UltraOpt : Distributed Asynchronous Hyperparameter Optimization better than HyperOpt. UltraOpt is a simple and efficient library to minimize expensive

null 98 Aug 16, 2022