docker run klaus / pip install klaus — the first Git web viewer that Just Works™.

Overview

travis-badge Join the chat at https://gitter.im/jonashaag/klaus

klaus: a simple, easy-to-set-up Git web viewer that Just Works™.

(If it doesn't Just Work for you, please file a bug.)

  • Super easy to set up -- no configuration required
  • Syntax highlighting
  • Markdown + RestructuredText rendering support
  • Pull + push support (Git Smart HTTP)
  • Code navigation using Exuberant ctags
Demo: http://klausdemo.lophus.org
Mailing list: http://groups.google.com/group/klaus-users
On PyPI: http://pypi.python.org/pypi/klaus/
Wiki: https://github.com/jonashaag/klaus/wiki
License: ISC (BSD)

Running with Docker

The easiest way to get started. We maintain a Docker image that has syntax highlighting, Markdown rendering, code navigation, etc. pre-configured:

docker run -v /path/to/your/repos:/repos \
           -p 7777:80 \
           -it jonashaag/klaus:latest \
           klaus --host 0.0.0.0 --port 80 /repos/repo1 /repos/repo2 ...

(Replace /path/to/your/repos with the folder that contains your Git repositories on the Docker host. You can also pass in multiple -v arguments if your repos are in multiple folders on the host.)

Go to http://localhost:7777 on the Docker host et voilà!

The command line above simply runs the klaus script -- for usage details, see the "Using the klaus script" section below.

Local setup

pip install klaus

(Optional dependencies: see Markup rendering in the wiki.)

Usage

See also: Klaus wiki

Using the klaus script

NOTE: This is intended for testing/low-traffic local installations only! The klaus script uses wsgiref internally which doesn't scale at all (in fact it's single-threaded and non-asynchronous).

To run klaus using the default options:

# With Docker:
docker run ... jonashaag/klaus:latest klaus [repo1 [repo2 ...]]
# Local setup:
klaus [repo1 [repo2 ...]]

For more options, see:

 # With Docker:
docker run ... jonashaag/klaus:latest klaus --help
# Local setup:
klaus --help

Using a real server

The klaus module contains a make_app function which returns a WSGI app.

An example WSGI helper script is provided with klaus (see klaus/contrib/wsgi.py), configuration being read from environment variables. Use it like this (uWSGI example):

uwsgi -w klaus.contrib.wsgi \
      --env KLAUS_SITE_NAME="Klaus Demo" \
      --env KLAUS_REPOS="/path/to/repo1 /path/to/repo2 ..." \
      ...

Gunicorn example:

gunicorn --env KLAUS_SITE_NAME="Klaus Demo" \
         --env KLAUS_REPOS="/path/to/repo1 /path/to/repo2 ..." \
         klaus.contrib.wsgi

The Docker image also has uwsgi preinstalled:

docker run ... jonashaag/klaus:latest uwsgi ...

See also deployment section in the wiki.

Contributing

Please do it!

I'm equally happy with bug reports/feature ideas and code contributions. If you have any questions/issues, I'm happy to help!

For starters, here are a few ideas what to work on. :-)

img1 img2 img3

Comments
  • Toggle visibility of diffs, fixes #64

    Toggle visibility of diffs, fixes #64

    Heya, I added some simple js, so now you can click on the commit header on the page and toggle the visibility of all files in the current commit view. Not sure if that was what you were thinking of, but it could be useful for having a quick glance over all changed files in the commit. I also did some slight changes to the CSS and removed some extra border. Bit of warning though, I'm kinda new to Git and Github so please tell me if I'm screwing up something.

    opened by lmas 22
  • git clone hangs, klaus reports an

    git clone hangs, klaus reports an "Illegal seek" error

    Hi, I can't tell if this is an issue with klaus or dulwich but I am unable to clone my repositories using latest git versions of both modules. git clone http://127.0.0.1:8080/klaus/ hangs. This is what the server log shows:

    ./bin/klaus --debug --smarthttp  ~/klaus/                                                                                                                                      
     * Running on http://127.0.0.1:8080/ (Press CTRL+C to quit)
     * Restarting with stat
     * Debugger is active!
     * Debugger pin code: 433-449-159
    127.0.0.1 - - [11/Apr/2016 12:17:10] "GET /klaus/info/refs?service=git-upload-pack HTTP/1.1" 200 -
    Debugging middleware caught exception in streamed response at a point where response headers were already sent.
    Traceback (most recent call last):
      File "/home/sbraz/venv/lib/python2.7/site-packages/dulwich/web.py", line 242, in handle_service_request
        handler.handle()
      File "/home/sbraz/venv/lib/python2.7/site-packages/dulwich/server.py", line 335, in handle
        get_tagged=self.get_tagged)
      File "/home/sbraz/venv/lib/python2.7/site-packages/dulwich/repo.py", line 250, in fetch_objects
        wants = determine_wants(self.get_refs())
      File "/home/sbraz/venv/lib/python2.7/site-packages/dulwich/server.py", line 547, in determine_wants
        want = self.proto.read_pkt_line()
      File "/home/sbraz/venv/lib/python2.7/site-packages/dulwich/protocol.py", line 150, in read_pkt_line
        sizestr = read(4)
      File "/home/sbraz/venv/lib/python2.7/site-packages/dulwich/protocol.py", line 337, in read
        data = self._recv(left)
      File "/usr/lib64/python2.7/gzip.py", line 268, in read
        self._read(readsize)
      File "/usr/lib64/python2.7/gzip.py", line 295, in _read
        pos = self.fileobj.tell()   # Save current position
    IOError: [Errno 29] Illegal seek
    127.0.0.1 - - [11/Apr/2016 12:17:10] "POST /klaus/git-upload-pack HTTP/1.1" 200 -
    

    I think this might be related to https://github.com/jelmer/dulwich/issues/140 but I fail to see where exactly the issue is.

    Bug Dulwich 
    opened by sbraz 14
  • Error 500 if the title is an str object containing non-ascii characters

    Error 500 if the title is an str object containing non-ascii characters

    Here is a script to trigger the problem:

    # -*- encoding: utf-8 -*-
    from wsgiref.simple_server import make_server
    from klaus import make_app
    
    application = make_app([], "Éléphant")
    print "Serving on http://localhost:8000"
    httpd = make_server('', 8000, application)
    httpd.serve_forever()
    

    This triggers an error 500:

    $ curl http://localhost:8000 
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
    <title>500 Internal Server Error</title>
    <h1>Internal Server Error</h1>
    <p>The server encountered an internal error and was unable to complete your request.  Either the server is overloaded or there is an error in the application.</p>
    

    It works fine if the title is a unicode object (eg. u"Éléphant" rather than "Éléphant"). The problem also occurs under mod_wsgi.

    Tested with klaus 0.2. For some reason I don't seem to be able to run the code from the master branch.

    opened by amarandon 14
  • Add Dockerfile

    Add Dockerfile

    there is a couple of community-maintained dockerfiles and images out there, but they all seem to be terribly outdated. I managed to put this one together finally; it is based on alpine linux, which makes it very tiny.

    opened by s-ol 13
  • Python 3 compatibility

    Python 3 compatibility

    Hi, it seems that the Web UI works well with Python 3 and dulwich 0.13.0. However, Smart HTTP does not:

    127.0.0.1 - - [26/Apr/2016 14:41:48] "GET /klaus/info/refs?service=git-upload-pack HTTP/1.1" 403 -
    Error on request:
    Traceback (most recent call last):
      File "/usr/lib64/python3.5/site-packages/werkzeug/serving.py", line 193, in run_wsgi
        execute(self.server.app)
      File "/usr/lib64/python3.5/site-packages/werkzeug/serving.py", line 184, in execute
        write(data)
      File "/usr/lib64/python3.5/site-packages/werkzeug/serving.py", line 164, in write
        assert isinstance(data, bytes), 'applications must write bytes'
    AssertionError: applications must write bytes
    

    I don't know if this is an issue with dulwich or klaus but I thought it would be nice to have an open bug to track the state of Python 3 compatibility.

    opened by sbraz 13
  • quickstart doesn't

    quickstart doesn't

    arnouten@bird:~/dev/klaus$ tools/quickstart.py 127.0.0.1 8080 ../gitwikicontent/ Traceback (most recent call last): File "tools/quickstart.py", line 48, in main() File "tools/quickstart.py", line 41, in main from klaus import app ImportError: No module named klaus

    opened by raboof 13
  • empty directory cause internal error

    empty directory cause internal error

    I got a lot of git project under the KLAUS_REPOS_ROOT, but when I add an empty directory in KLAUS_REPOS_ROOT by mistake, it will cause an internal error and the services are all failed. Is there any option to set so i can make klaus just ignore the bad project so other projects can not be affected? Thank you.

    opened by luxu1220 12
  • AttributeError: _tag_time

    AttributeError: _tag_time

    Hi, I have this issue when I click on the git directory:

    Traceback (most recent call last):
      File "/usr/lib/python3.5/site-packages/flask/app.py", line 1988, in wsgi_app
        response = self.full_dispatch_request()
      File "/usr/lib/python3.5/site-packages/flask/app.py", line 1641, in full_dispatch_request
        rv = self.handle_user_exception(e)
      File "/usr/lib/python3.5/site-packages/flask/app.py", line 1544, in handle_user_exception
        reraise(exc_type, exc_value, tb)
      File "/usr/lib/python3.5/site-packages/flask/_compat.py", line 33, in reraise
        raise value
      File "/usr/lib/python3.5/site-packages/flask/app.py", line 1639, in full_dispatch_request
        rv = self.dispatch_request()
      File "/usr/lib/python3.5/site-packages/flask/app.py", line 1625, in dispatch_request
        return self.view_functions[rule.endpoint](**req.view_args)
      File "/usr/lib/python3.5/site-packages/flask/views.py", line 84, in view
        return self.dispatch_request(*args, **kwargs)
      File "/usr/lib/python3.5/site-packages/klaus/views.py", line 79, in dispatch_request
        self.make_template_context(repo, rev, path.strip('/'))
      File "/usr/lib/python3.5/site-packages/klaus/views.py", line 144, in make_template_context
        super(HistoryView, self).make_template_context(*args)
      File "/usr/lib/python3.5/site-packages/klaus/views.py", line 120, in make_template_context
        super(TreeViewMixin, self).make_template_context(*args)
      File "/usr/lib/python3.5/site-packages/klaus/views.py", line 98, in make_template_context
        'tags': repo.get_tag_names(),
      File "/usr/lib/python3.5/site-packages/klaus/repo.py", line 95, in get_tag_names
        return self.get_ref_names_ordered_by_last_commit('refs/tags')
      File "/usr/lib/python3.5/site-packages/klaus/repo.py", line 84, in get_ref_names_ordered_by_last_commit
        sorted_names = sorted(refs.keys(), key=get_commit_time, reverse=True)
      File "/usr/lib/python3.5/site-packages/klaus/repo.py", line 78, in get_commit_time
        return obj.tag_time
      File "/usr/lib/python3.5/site-packages/dulwich/objects.py", line 149, in get
        return getattr(obj, "_"+name)
    AttributeError: _tag_time
    
    Bug Ready to work on Needs research C: 1 
    opened by 95A31 12
  • Improve Apache docs

    Improve Apache docs

    @jahir

    While what you wrote here works: https://github.com/jonashaag/klaus/wiki/Apache---mod_wsgi-deployment/_compare/a759371%5E...a759371

    It doesn't actually make a lot of sense to put these values into environment variables in the first place. We could simply directly call make_autoreloading_app with the config values.

    opened by jonashaag 11
  • Error on blame function

    Error on blame function

    Hi, when I click on blame I have this:

    Traceback (most recent call last):
      File "/usr/lib/python3.5/site-packages/flask/app.py", line 1988, in wsgi_app
        response = self.full_dispatch_request()
      File "/usr/lib/python3.5/site-packages/flask/app.py", line 1641, in full_dispatch_request
        rv = self.handle_user_exception(e)
      File "/usr/lib/python3.5/site-packages/flask/app.py", line 1544, in handle_user_exception
        reraise(exc_type, exc_value, tb)
      File "/usr/lib/python3.5/site-packages/flask/_compat.py", line 33, in reraise
        raise value
      File "/usr/lib/python3.5/site-packages/flask/app.py", line 1639, in full_dispatch_request
        rv = self.dispatch_request()
      File "/usr/lib/python3.5/site-packages/flask/app.py", line 1625, in dispatch_request
        return self.view_functions[rule.endpoint](**req.view_args)
      File "/usr/lib/python3.5/site-packages/flask/views.py", line 84, in view
        return self.dispatch_request(*args, **kwargs)
      File "/usr/lib/python3.5/site-packages/klaus/views.py", line 80, in dispatch_request
        return self.get_response()
      File "/usr/lib/python3.5/site-packages/klaus/views.py", line 83, in get_response
        return render_template(self.template_name, **self.context)
      File "/usr/lib/python3.5/site-packages/flask/templating.py", line 134, in render_template
        context, ctx.app)
      File "/usr/lib/python3.5/site-packages/flask/templating.py", line 116, in _render
        rv = template.render(context)
      File "/usr/lib/python3.5/site-packages/jinja2/environment.py", line 989, in render
        return self.environment.handle_exception(exc_info, True)
      File "/usr/lib/python3.5/site-packages/jinja2/environment.py", line 754, in handle_exception
        reraise(exc_type, exc_value, tb)
      File "/usr/lib/python3.5/site-packages/jinja2/_compat.py", line 37, in reraise
        raise value.with_traceback(tb)
      File "/usr/lib/python3.5/site-packages/klaus/templates/blame_blob.html", line 1, in top-level template code
        {% extends 'base.html' %}
      File "/usr/lib/python3.5/site-packages/klaus/templates/base.html", line 1, in top-level template code
        {% extends 'skeleton.html' %}
      File "/usr/lib/python3.5/site-packages/klaus/templates/skeleton.html", line 2, in top-level template code
        <title>{% block title %}{% endblock %} - {{ SITE_NAME }}</title>
      File "/usr/lib/python3.5/site-packages/klaus/templates/blame_blob.html", line 4, in block "title"
        {{ path }} - {{ super() }}
      File "/usr/lib/python3.5/site-packages/klaus/templates/base.html", line 4, in block "title"
        {{ repo.name }} ({{ rev|shorten_sha1 }})
      File "/usr/lib/python3.5/site-packages/klaus/utils.py", line 171, in shorten_sha1
        if re.match(r'[a-z\d]{20,40}', str(sha1)):
      File "/usr/lib/python3.5/re.py", line 163, in match
        return _compile(pattern, flags).match(string)
    TypeError: cannot use a bytes pattern on a string-like object
    

    I fixed replacing sha1 with str(sha1) in shorten_sha1 function.

    Bug Ready to work on C: 1 
    opened by 95A31 11
  • implement / document way to set canonical URL for klaus site

    implement / document way to set canonical URL for klaus site

    I'm running klaus on a separate server, to which I proxy connections. This causes klaus to include the URL with the proxied server in any URLs, but that URL is not reachable for external users.

    See e.g. https://jelmer.uk/klaus/etcd/

    It would be great if there was a way to set the canonical URL to use in links, or if there is already a way to do this (through the frameworks used) if this could be documented.

    opened by jelmer 11
  • SetuptoolsDeprecationWarning:     Installing 'klaus.templates' as data is deprecated, please list it in `packages`.

    SetuptoolsDeprecationWarning: Installing 'klaus.templates' as data is deprecated, please list it in `packages`.

    Hi, When running setup.py build, we see this for both klaus.templates and klaus.static:

    /usr/lib/python3.10/site-packages/setuptools/command/build_py.py:202: SetuptoolsDeprecationWarning:     Installing 'klaus.templates' as data is deprecated, please list it in `packages`.
        !!                                                                                                                                                                                                             
                                                                                                                                                                                                                       
                                                                                                                                                                                                                       
        ############################                                                                                                                                                                                   
        # Package would be ignored #                                                                                                                                                                                   
        ############################                                                                                                                                                                                   
        Python recognizes 'klaus.templates' as an importable package,                                                                                                                                                  
        but it is not listed in the `packages` configuration of setuptools.                                                                                                                                            
                                                                                                                                                                                                                       
        'klaus.templates' has been automatically added to the distribution only                                                                                                                                        
        because it may contain data files, but this behavior is likely to change                                                                                                                                       
        in future versions of setuptools (and therefore is considered deprecated).                           
                                                                                                                                                                                                                       
        Please make sure that 'klaus.templates' is included as a package by using                                                                                                                                      
        the `packages` configuration field or the proper discovery methods                                                                                                                                             
        (for example by using `find_namespace_packages(...)`/`find_namespace:`                                                                                                                                         
        instead of `find_packages(...)`/`find:`).                                                                                                                                                                      
                                                                                                             
        You can read more about "package discovery" and "data files" on setuptools                                                                                                                                     
        documentation page.                                                                                                                                                                                            
                                                                                                                                                                                                                       
                                                                                                                                                                                                                       
    !!                                                                                                                                                                                                                 
    
    opened by sbraz 2
  • ownership issue

    ownership issue

    Doesn't seem to like my cloned repositories unless I run docker exec run git config --global --add safe.directory [repo] on it

    To add an exception for this directory, call:
    
            git config --global --add safe.directory /repos/embedder
    [2022-11-24 01:55:08,118] ERROR in app: Exception on /embedder/ [GET]
    Traceback (most recent call last):
      File "/usr/lib/python3.10/site-packages/flask/app.py", line 2073, in wsgi_app
        response = self.full_dispatch_request()
      File "/usr/lib/python3.10/site-packages/flask/app.py", line 1519, in full_dispatch_request
        rv = self.handle_user_exception(e)
      File "/usr/lib/python3.10/site-packages/flask/app.py", line 1517, in full_dispatch_request
        rv = self.dispatch_request()
      File "/usr/lib/python3.10/site-packages/flask/app.py", line 1503, in dispatch_request
        return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
      File "/usr/lib/python3.10/site-packages/flask/views.py", line 84, in view
        return current_app.ensure_sync(self.dispatch_request)(*args, **kwargs)
      File "/usr/lib/python3.10/site-packages/klaus/views.py", line 167, in dispatch_request
        self.make_template_context(repo, namespace, rev, path.strip("/"))
      File "/usr/lib/python3.10/site-packages/klaus/views.py", line 330, in make_template_context
        history = self.context["repo"].history(
      File "/usr/lib/python3.10/site-packages/klaus/repo.py", line 205, in history
        output = subprocess.check_output(cmd, cwd=os.path.abspath(self.path))
      File "/usr/lib/python3.10/subprocess.py", line 420, in check_output
        return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
      File "/usr/lib/python3.10/subprocess.py", line 524, in run
        raise CalledProcessError(retcode, process.args,
    subprocess.CalledProcessError: Command '['git', 'log', '--format=%H', '--max-count=11', 'f2beb1ac348334962b85b03a204f14966c942```
    opened by WaveringAna 11
  • handle dulwich.objects.EmptyFileException

    handle dulwich.objects.EmptyFileException

    This one is pretty obscure, but Dulwich may raise EmptyFileException when part of the repository is corrupted. It would be nice if klaus displayed an appropriate error page.

      File &quot;/usr/local/lib/python3.10/dist-packages/klaus/views.py&quot;, line 332, in make_template_context
        super(IndexView, self).make_template_context(*args)
      File &quot;/usr/local/lib/python3.10/dist-packages/klaus/views.py&quot;, line 222, in make_template_context
        super(TreeViewMixin, self).make_template_context(*args)
      File &quot;/usr/local/lib/python3.10/dist-packages/klaus/views.py&quot;, line 184, in make_template_context
        repo, rev, path, commit = _get_repo_and_rev(repo, namespace, rev, path)
      File &quot;/usr/local/lib/python3.10/dist-packages/klaus/views.py&quot;, line 111, in _get_repo_and_rev
        rev = repo.get_default_branch()
      File &quot;/usr/local/lib/python3.10/dist-packages/klaus/repo.py&quot;, line 147, in get_default_branch
        for name in self.get_branch_names():
      File &quot;/usr/local/lib/python3.10/dist-packages/klaus/repo.py&quot;, line 182, in get_branch_names
        return self.get_ref_names_ordered_by_last_commit(&quot;refs/heads&quot;, exclude)
      File &quot;/usr/local/lib/python3.10/dist-packages/klaus/repo.py&quot;, line 175, in get_ref_names_ordered_by_last_commit
        sorted_names = sorted(refs.keys(), key=get_commit_time, reverse=True)
      File &quot;/usr/local/lib/python3.10/dist-packages/klaus/repo.py&quot;, line 163, in get_commit_time
        obj = self[refs[refname]]
      File &quot;/code/dulwich/dulwich/repo.py&quot;, line 783, in __getitem__
        return self.object_store[name]
      File &quot;/code/dulwich/dulwich/object_store.py&quot;, line 144, in __getitem__
        type_num, uncomp = self.get_raw(sha)
      File &quot;/code/dulwich/dulwich/object_store.py&quot;, line 581, in get_raw
        ret = self._get_loose_object(hexsha)
      File &quot;/code/dulwich/dulwich/object_store.py&quot;, line 745, in _get_loose_object
        return ShaFile.from_path(path)
      File &quot;/code/dulwich/dulwich/objects.py&quot;, line 422, in from_path
        return cls.from_file(f)
      File &quot;/code/dulwich/dulwich/objects.py&quot;, line 428, in from_file
        obj = cls._parse_file(f)
      File &quot;/code/dulwich/dulwich/objects.py&quot;, line 396, in _parse_file
        raise EmptyFileException(&quot;Corrupted empty file detected&quot;)
    dulwich.objects.EmptyFileException: Corrupted empty file detected </div>
    
    opened by jelmer 0
  • Support nested namespaces (without ~prefix)

    Support nested namespaces (without ~prefix)

    This is a major change that changes all existing route fomats. The base route of each repo is no longer /repo or /~ns/repo but /repo/-/ or /deeply/nested/repo/-/, whereas the Dulwich/SMARTHTTP routes are at /repo.git or /deeply/nested/repo.git.

    benefits

    Klaus is expected to be used together with some method of hosting Git repositories, such as plain SSH access, git-shell, or e.g. gitolite. All of these allow organizing the repositories freely, creating directory structures (and even mixing with other files) as wanted.

    This routing scheme is inspired by GitLab, where repositories and groups can be nested in this way also. It allows klaus to have that same flexibility and keeps the SMARTHTTP clone URL "symmetric" to what e.g. an SSH clone URL may look like:

    git@host:path/to/repo.git
    http://host/path/to/repo.git
    

    downsides

    Some might find the - in the URL irritating. The biggest issue is simply that changing the URL scheme is not backwards compatible.

    possible improvements

    It would make sense to redirect /repo to /repo/-/ automatically, which would solve the most common issue (links to repositories not working).

    It'd be great to be able to browse the namespace tree and maybe even show files (or just READMEs) there to use this organization scheme to the fullest.

    opened by s-ol 14
  • OOM error on small repo when cloning/pull

    OOM error on small repo when cloning/pull

    I have a very small repo (~1Mb), yet when cloning, git-remote-https gets killed because the system runs out of memory. It's only this repo, all others work fine.

    opened by DUOLabs333 21
Owner
Jonas Haag
Freelancer available for hire. Founder looking for new challenges. Previously CTO @cashlink
Jonas Haag
🦉Data Version Control | Git for Data & Models

Website • Docs • Blog • Twitter • Chat (Community & Support) • Tutorial • Mailing List Data Version Control or DVC is an open-source tool for data sci

Iterative 10.9k Jan 9, 2023
A simple version control system built on top of Git

Gitless Gitless is a version control system built on top of Git, that is easy to learn and use: Simple commit workflow Track or untrack files to contr

Gitless 1.7k Dec 22, 2022
Patchwork is a web-based patch tracking system designed to facilitate the contribution and management of contributions to an open-source project.

Patchwork Patchwork is a patch tracking system for community-based projects. It is intended to make the patch management process easier for both the p

Patchwork 220 Nov 29, 2022
Tiny Git is a simplified version of Git with only the basic functionalities to gain better understanding of git internals.

Tiny Git is a simplified version of Git with only the basic functionalities to gain better understanding of git internals. Implemented Functi

Ahmed Ayman 2 Oct 15, 2021
Image-Viewer is a Windows image viewer based on Python 3.

Image-Viewer Hi! Image-Viewer is a Windows image viewer based on Python 3. Using You must download Image-Viewer.exe from the root of the repository. T

null 2 Apr 18, 2022
Napari 3D Ortho Viewer - an ortho viewer for napari for 3D images

napari-3d-ortho-viewer Napari 3D Ortho Viewer - an ortho viewer for napari for 3D images This napari plugin was generated with Cookiecutter using @nap

niklas netter 5 Nov 28, 2022
🗽 Like yarn outdated/upgrade, but for pip. Upgrade all your pip packages and automate your Python Dependency Management.

pipupgrade The missing command for pip Table of Contents Features Quick Start Usage Basic Usage Docker Environment Variables FAQ License Features Upda

Achilles Rasquinha 529 Dec 31, 2022
Progressbar 2 - A progress bar for Python 2 and Python 3 - "pip install progressbar2"

Text progress bar library for Python. Travis status: Coverage: Install The package can be installed through pip (this is the recommended method): pip

Rick van Hattem 795 Dec 18, 2022
pip install antialiased-cnns to improve stability and accuracy

Antialiased CNNs [Project Page] [Paper] [Talk] Making Convolutional Networks Shift-Invariant Again Richard Zhang. In ICML, 2019. Quick & easy start Ru

Adobe, Inc. 1.6k Dec 28, 2022
Install multiple versions of r2 and its plugins via Pip on any system!

r2env This repository contains the tool available via pip to install and manage multiple versions of radare2 and its plugins. r2-tools doesn't conflic

radare org 18 Oct 11, 2022
Manually Install Python 2.7 pip without any problem !

Python2.7_install_pip Manually Install Python 2.7 pip without any problem ! Download installPip.py to your system and Run the code using this Command

Ali Jafari 1 Dec 9, 2021
Pygame for humans (pip install hooman) (25k+ downloads)

hooman ~ pygame for humans pip install hooman join discord: https://discord.gg/Q23ATve The package for clearer, shorter and cleaner PyGame codebases!

Abdur-Rahmaan Janhangeer 31 Nov 8, 2022
Pip install minimal-pandas-api-for-polars

Minimal Pandas API for Polars Install From PyPI: pip install minimal-pandas-api-for-polars Example Usage (see tests/test_minimal_pandas_api_for_polars

Austin Ray 6 Oct 16, 2022
pip install python-office

?? python for office ?? http://www.python4office.cn/ ?? ?? English Documentation ?? 简介 Python-office 是一个 Python 自动化办公第三方库,能解决大部分自动化办公的问题。而且每个功能只需一行代码,

程序员晚枫 272 Dec 29, 2022
Run your jupyter notebooks as a REST API endpoint. This isn't a jupyter server but rather just a way to run your notebooks as a REST API Endpoint.

Jupter Notebook REST API Run your jupyter notebooks as a REST API endpoint. This isn't a jupyter server but rather just a way to run your notebooks as

Invictify 54 Nov 4, 2022
Your own movie streaming service. Easy to install, easy to use. Download, manage and watch your favorite movies conveniently from your browser or phone. Install it on your server, access it anywhere and enjoy.

Vigilio Your own movie streaming service. Easy to install, easy to use. Download, manage and watch your favorite movies conveniently from your browser

Tugcan Olgun 141 Jan 6, 2023
Create pinned requirements.txt inside a Docker image using pip-tools

Pin your Python dependencies! pin-requirements.py is a script that lets you pin your Python dependencies inside a Docker container. Pinning your depen

null 4 Aug 18, 2022
pip-run - dynamic dependency loader for Python

pip-run provides on-demand temporary package installation for a single interpreter run. It replaces this series of commands (or their Windows equivale

Jason R. Coombs 79 Dec 14, 2022
Git Plan - a better workflow for git

git plan A better workflow for git. Git plan inverts the git workflow so that you can write your commit message first, before you start writing code.

Rory Byrne 178 Dec 11, 2022