PLZ a new PIP
Tags: python, nim
Published: 2020-03-27 20:56:25

---
title: PLZ a new PIP
published: true
description: PLZ a new Python PIP Alternative
tags: python, nim
cover_image: https://dev-to-uploads.s3.amazonaws.com/i/bduw5h3o50t5t4qamm56.jpg
---

**PLZ is a PIP Alternative designed for Dockers, Alpines, Vagrants, and containers.**


# Features

- `1` Megabyte, `1` file, `0` Dependencies, ~`500` Lines of code.
- **Documentation Generator with Markdown to HTML & PDF**
- **No Garbage Collector** (Rust-like memory management).
- **Single file**, it can even delete itself after use.
- Install, uninstall, reinstall, download, upload to PyPI, etc.
- Checks GPG if package has it, checks SHA sum for all packages.
- Designed for Docker or Alpine usage.
- Inferred Strong Static Typing with Z3 Theorem Prover.
- Immutable programming, No Global Mutable State.
- The only PIP alternative in the world that just works even with Python/Virtualenv completely broken. Can fix a broken PIP.
- Machine code performance, as fast as optimized C.
- High performance with low resources (RPi, VPS, cloud, old pc, etc).
- No Installs, no setups, just copy & paste and run.
- Colored output on the Terminal.
- Project skeleton creator to create your own new Python projects.
- Wont save any passwords, databases, keys, secrets, to disk nor Internet.
- No temporary folders nor files.
- Not meant as a drop-in replacement for anything pre-existing.
- Tiny single file source code (not counting string constants).
- Works fully isolated, self-contained standalone application.
- It does NOT depend on `pip` (Not a `pip` wrapper).
- GitHub Actions CI Builds every commit from zero.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/6si9egj2y8ohnw99crwk.png)

# Use

```console
$ plz install pre-commit   # Install 1 or more packages
$ plz uninstall pre-commit # Uninstall 1 or more packages
$ plz reinstall pre-commit # Reinstall 1 or more packages
$ plz download pre-commit  # Download 1 or more packages
$ plz hash file.py         # Show SHA CheckSum of file/package
$ plz open file.py         # Open a module in your default code editor
$ plz backup /folder/      # Compressed backup of file/package with SHA Checksum
$ plz init                 # New Python project template (Interactive)
$ plz stats                # PyPI official service status report
$ plz newpackages          # List all the new Packages uploaded to PyPI recently
$ plz lastupdates          # List all existing Packages updated on PyPI recently
$ plz lastjobs             # List all new Job Posts updated on Python recently
$ plz userpackages         # List all existing Packages by User (Interactive)
$ plz latestversion        # Show the Latest Version of a PYPI Package (SemVer)
$ plz forceInstallPip      # Force install PIP on arbitrary folder (get-pip.py)
$ plz doc file.md          # Markdown/ReSTructuredText to HTML  (MD/RST can be mixed).
$ plz doc2latex file.md    # Markdown/ReSTructuredText to Latex (MD/RST can be mixed).
$ plz doc2json file.md     # Markdown/ReSTructuredText to JSON  (MD/RST can be mixed).
$ plz upload packg-1.0.zip # Similar to "twine upload" (Interactive,asks user,wont need Twine).
$
$ plz --enUsUtf8           # Force Encoding to UTF-8 and Language to English
$ plz --cleanpyc           # Clean all __pycache__ and *.pyc
$ plz --cleanpypackages    # Clean all __pypackages__
$ plz --cleantemp          # Clean all temporary folder.
$ plz --cleanpipcache      # Clean all PIP Cache folder.
$ plz --cleanvenvs         # Clean Virtualenvs (interactive, asks Y/N 1-by-1).
$ plz --publicip           # Show your Public IP Address (Internet connectivity check).
$ plz --log=file.log       # Full path to a verbose local log file.
$ plz --backuplogs         # Compress old PLZ Logs at exit, to save disk resources.
$ plz --putenv:key=val     # Set an environment variable "KEY=Value", can be repeated.
$ plz --nice20             # Runs with "nice = 20" (CPU Priority, smooth priority).
$ plz --suicide            # Deletes itself permanently and exit (single file app).
$ plz --dump               # Show system info JSON and quit (for Developers and Bug Reporting).
$ plz --version            # Show Version
$ plz --help               # Show Help
```

<img src="https://raw.githubusercontent.com/juancarlospaco/plz/master/python-wat.png" width="256" height="256">


# Example

```console
$ plz install bottle

2020-03-27T17:04:52-03:00, PID is 419469, 1 packages to download and install ["bottle"]
Generate Install Script? (y/N): n

bottle  0.12.18
https://files.pythonhosted.org/packages/d9/4f/57887a07944140dae0d039d8bc270c249fc7fc4a00744effd73ae2cde0a9/bottle-0.12.18.tar.gz
71557 Bytes total (compressed)
SHA256 (bottle-0.12.18.tar.gz) = 0819b74b145a7def225c0e83b16a4d5711fde751cd92bae467a69efce720f69e
https://files.pythonhosted.org/packages/d9/4f/57887a07944140dae0d039d8bc270c249fc7fc4a00744effd73ae2cde0a9/bottle-0.12.18.tar.gz.asc 
HTTP-404? (Package without PGP Signature)

x bottle-0.12.18/bottle.egg-info/PKG-INFO
x bottle-0.12.18/bottle.egg-info/SOURCES.txt
x bottle-0.12.18/bottle.egg-info/dependency_links.txt
x bottle-0.12.18/bottle.egg-info/top_level.txt
x bottle-0.12.18/MANIFEST.in
x bottle-0.12.18/README.rst
x bottle-0.12.18/bottle.py
x bottle-0.12.18/setup.py
x bottle-0.12.18/PKG-INFO
x bottle-0.12.18/setup.cfg

2020-03-27T17:04:55-03:00 0 Failed, 1 Success on 1 second, 887 milliseconds, 565 microseconds, and 957 nanoseconds to download+install 1 packages

$
$ plz init

New Python project name?: example
Generate optional Unitests on ./tests (y/N): y
Generate optional Documentation on ./docs (y/N): y
Generate optional Examples on ./examples (y/N): y
Generate optional DevOps on ./devops (y/N): y
Generate optional GitHub files on .github (y/N): y
Generate .gitignore file (y/N): y
Generate optional files (y/N): y
Use Markdown(MD) instead of ReSTructuredText(RST)  (y/N): y

Created a new Python project skeleton, happy hacking, bye...

$ ls example/
AUTHORS.md  CHANGELOG.md  CODE_OF_CONDUCT.md  CONTRIBUTING.md  devops  docs examples
LICENSE.md  Makefile  MANIFEST.in  README.md  requirements.txt  setup.cfg  setup.py  tests

$ echo "Hello **World**" > example.md
$ plz doc example.md 
Hello <strong>World</strong>

$ cat example.html
Hello <strong>World</strong>

$ plz doc2latex example.md
Hello \textbf{World}

$ cat example.tex
Hello \textbf{World}

$ plz --dump
{
  "hostCPU": "amd64",
  "hostOS": "linux",
  "cpuEndian": "littleEndian",
  "getTempDir": "/tmp/",
  "now": "2020-03-27T17:40:00-03:00",
  "getFreeMem": 151552,
  "getTotalMem": 528384,
  "getOccupiedMem": 267376,
  "countProcessors": 8,
  "arch": "x86_64",
  "ssd": true,
  "FileSystemCaseSensitive": true,
  "git": "2.25.1",
  "node": "v13.9.0",
  "python": "3.8.1"
}

$ plz --suicide  # Good bye world :(
true

$ plz
Command not found: plz
```

![](https://raw.githubusercontent.com/juancarlospaco/plz/master/pepehack.gif "Work in progress!") Output, messages and other stuff may change in the future.


# Star PLZ on GitHub

![Stars over time](https://starchart.cc/juancarlospaco/plz.svg "Star PLZ on GitHub!")

_We re-implemented PIP on ~500 lines of code, it deserves a Star ?._

- <h2>https://github.com/juancarlospaco/plz</h2>

👑