{"id":15445212,"url":"https://github.com/jhermann/ezpy","last_synced_at":"2025-08-02T01:33:25.605Z","repository":{"id":46082111,"uuid":"94902747","full_name":"jhermann/ezpy","owner":"jhermann","description":"[ALPHA] :pizza: Make Python application installs easy as pie, for both users and developers.","archived":false,"fork":false,"pushed_at":"2023-11-02T21:16:17.000Z","size":90,"stargazers_count":11,"open_issues_count":3,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-29T13:11:18.331Z","etag":null,"topics":["deployment","installation","python3","user-experience"],"latest_commit_sha":null,"homepage":"https://github.com/jhermann/ezpy#ezpy","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jhermann.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-06-20T14:52:10.000Z","updated_at":"2024-11-26T01:55:23.000Z","dependencies_parsed_at":"2024-12-10T17:03:30.331Z","dependency_job_id":"de428a88-132f-475f-a774-c3fe2116742f","html_url":"https://github.com/jhermann/ezpy","commit_stats":{"total_commits":62,"total_committers":2,"mean_commits":31.0,"dds":"0.016129032258064502","last_synced_commit":"a3e173d61b6a7e4a521ac2921fd16a716d314a01"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jhermann%2Fezpy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jhermann%2Fezpy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jhermann%2Fezpy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jhermann%2Fezpy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jhermann","download_url":"https://codeload.github.com/jhermann/ezpy/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249258365,"owners_count":21239384,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["deployment","installation","python3","user-experience"],"created_at":"2024-10-01T19:44:18.889Z","updated_at":"2025-04-19T20:41:33.835Z","avatar_url":"https://github.com/jhermann.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"====\nezpy\n====\n\n |Travis CI|  |Coveralls|  |GitHub Issues|  |License|\n |Latest Version|\n\nMake Python application installs easy as pie, for both users and developers.\n\n.. contents:: **Contents**\n\n\n.. _setup-start:\n\nIntroduction\n------------\n\nWhat Does it Do?\n^^^^^^^^^^^^^^^^\n\nThe main goal of the project is to make installs very easy and convenient,\nwithout abandoning security and other technical requirements.\nThink ``pipsi`` with a wider scope, and working on Python 3.\n\n\nDesign Goals\n^^^^^^^^^^^^\n\n* Reduce installation instructions to ideally one or two command calls.\n* Make distribution of ‘simple’ scripts a breeze.\n\n  * … but support dependencies from PyPI nontheless.\n\n* Require only a Python interpreter to be already installed on an end-user machine.\n\n  * … but use what's installed already (if new enough).\n  * Work on outdated installations (say down to Jessie / Trusty for now).\n\n* Work on Linux, MacOS, Windows (in that order of importance).\n* Rely heavily on existing tooling, especially ``venv`` and ``pip``.\n* Vendor any dependencies, or don't have any beyond the standard library.\n\n\nWhat's Here?\n^^^^^^^^^^^^\n\nWhile this repository contains code for a command line tool, it does not do anything *yet*.\nAt the moment pointing to other projects that fit above design goals proves more useful.\n\nSo here is what you get:\n\n* My thoughts on good release and installation work-flows in “Usage”.\n* Quick hints on how to use `dephell`\\ 's ``jail`` sub-command for easy software installation.\n* Deadsnakes PPA builds for Debian in a Docker container, leading to 3.6 … 3.8 being uniformly available on Debian (old-)stable and Ubuntu (old-)LTS, i.e. the four major releases of the Debian-verse.\n* A list of related projects, with comments on ones I tried myself, and those I regularly use.\n\nIf you're missing something within the range of the stated design goals, open an issue with your user-story,\nand we'll see if I like it. ☺\n\n\nUsage\n-----\n\nEnd-Users\n^^^^^^^^^\n\n**Story ♯1:** Users can download a simple script and start it (or, well, ``curl|python`` it),\nand it'll bootstrap a full environment of dependencies (``dephell jail`` fits that bill).\n\n**Story ♯2**:\nUsers need to ``pip3 install --user ezpy``.\nCalling ``python3 -m ezpy check`` after that will go around any OS shenanigans\n– that could be used to handle the ``~/.local/bin`` problem (``python3 -m ezpy fix-path``).\n\nGiven no dependencies, ``sudo pip3 install ezpy`` would also be ok.\nAnd this is another option for bootstrapping:\n\n.. code-block::\n\n    pip install -t /tmp/$USER-$$ ezpy\n    python /tmp/$USER-$$/ezpy.py bootstrap\n\nThen users are able to install any\nPyPI application or tool via a simple call to ``ezpy get|run ‹requirement|script-url›``.\nMostly like ``pipsi`` operates.\nConsole entry points are linked / copied into the existing path, leaving out any unrelated\nvirtualenv binaries (including Python itself).\n\n**Story ♯3:** ``ezpy run ‹url›#‹algo›=‹checksum›`` to directly run scripts from the web\n– security is based on the trust you have into the 3rd party\nthat gave you the link with the checksum.\nNo difference to PyPI installs secured by a checksum – those run downloaded code, too.\n``dephell jail try …`` does this already, but I'm unsure about any special security measueres.\n\n**Story ♯4:** ``ezpy docker run …`` – again, ``dephell`` has some Docker support, but I did not try that yet.\n\n\nDevelopers\n^^^^^^^^^^\n\nezpy should also be usable to ease the developer workflow.\nCloning projects by their PyPI name from the usual sources (GitHub, GitLab, …),\nas well as cloning a fork of those project made in your account\n(with both upstream and origin set accordingly).\n\nThen there is support for the end user stories…\n\nRelating to ♯1, give developers the ability to embed code\nthat intercepts command calls (``myscript ezpy …``).\nThey call ``ezpy embed ‹myscript.py›``, and a stub is added that does this.\n\nFor #2, nothing special has to be done. Just release normally to PyPI,\nor make a script available via a HTTP[S] URL.\n\n♯4: Something like ``ezpy docker build …`` or ``ezpy docker-file …``.\n\n\nInstallation\n------------\n\n*ezpy* can be installed via ``pip install ezpy`` as usual,\nsee `releases \u003chttps://github.com/jhermann/ezpy/releases\u003e`_ for an overview of available versions.\nTo get a bleeding-edge version from source, use these commands::\n\n    repo=\"jhermann/ezpy\"\n    pip install -r \"https://raw.githubusercontent.com/$repo/master/requirements.txt\"\n    pip install -UI -e \"git+https://github.com/$repo.git#egg=${repo#*/}\"\n\nAs a developer, to create a working directory for this project, call these commands::\n\n    git clone \"https://github.com/jhermann/ezpy.git\"\n    cd \"ezpy\"\n    command . .env --yes --develop  # add '--virtualenv /usr/bin/virtualenv' for Python2\n    invoke build check\n\nYou might also need to follow some\n`setup procedures \u003chttps://py-generic-project.readthedocs.io/en/latest/installing.html#quick-setup\u003e`_\nto make the necessary basic commands available on *Linux*, *Mac OS X*, and *Windows*.\n\n\n‘dephell’ Notes\n---------------\n\n‘dephell’ is a useful add-on tool for project and venv management\nthat works with existing standard tooling,\ninstead of doing a bad replacement job like so many others.\n\nIt is installed via a Python installer script into its own venv\n(compatible to what dephell itself creates as a so-called ‘jail’).\n\n.. code-block::\n\n    curl -L dephell.org/install | python3  # or 'python3.6'\n\nTo get a fully functional ‘git clone’d working directory as of January 2020,\nthis is needed after a ‘normal’ venv setup::\n\n    pip install \"pip\u003c19\"  # fixed in dephell 0.8.1 for pip 20\n    pip install -e .[full]  # install all optional deps\n    pip install \"mistune\u003c1\"  # fix \"m2r\"\n\nNote that Python 3.6 is needed at minimum.\n\n\nDeadsnakes PPA Builds for Debian in Docker\n------------------------------------------\n\nSee the `deadsnakes subfolder`_ for a Dockerfile that builds\npackages for some Debian releases based on the\n`Deadsnakes PPA \u003chttps://github.com/deadsnakes\u003e`_ code.\n\nFor example, Debian Stretch comes with Python 3.5.3 on board,\nand this allows you to build Python 3.6 packages that can be\ninstalled concurrently to the default 3.5 ones.\n\n.. _`deadsnakes subfolder`: https://github.com/jhermann/ezpy/tree/master/deadsnakes#readme\n\n\nReferences\n----------\n\n* `pip issue #3813 \u003chttps://github.com/pypa/pip/issues/3813\u003e`_\n* `Share scripts that have dependencies with Nix \u003chttps://compiletoi.net/share-scripts-that-have-dependencies-with-nix/\u003e`_\n\nRelated Projects\n^^^^^^^^^^^^^^^^\n\nLet's start with an overview of tools I used at some point (or which I'm still using) and which proved useful and usable:\n\n* ``PEX`` creates single file ZIP apps (PEP 441). ``shiv`` is very similar. ``PEX`` has some multi-platform support, while ``shiv`` is simpler. If one them does not satisfy your needs, try the other.\n* ``platter`` collects wheels into a tarball for off-line and repeatable deployments. It's sort-of unmaintained. ``wagon`` is similar, but I did not test it yet.\n* For ``dephell``, see the section above.\n\nWhat follows is a longer list, in part abandoned / unmaintained, and with different traits regarding platform compatibility and versatility.\nLast recorded commit activity is included as ``(YYYY)`` – at the time entries were initially added or updated.\nSo these dates are an upper bound regarding age, and are not consistent across all entries.\n\n* `pantsbuild/pex \u003chttps://github.com/pantsbuild/pex\u003e`_ (2020) – A library and tool for generating .pex (Python EXecutable) files.\n* `linkedin/shiv \u003chttps://github.com/linkedin/shiv#shiv\u003e`_ (2020) – A command line utility for building fully self-contained Python zipapps as outlined in PEP 441, but with all their dependencies included. [Python 3.6+]\n* `mitsuhiko/platter \u003chttps://github.com/mitsuhiko/platter\u003e`_ (2018) – A useful helper for wheel deployments.\n* `takluyver/pynsist \u003chttps://github.com/takluyver/pynsist\u003e`_ (2019) – Build Windows installers for Python applications (also cross-platform).\n* `dephell/dephell \u003chttps://github.com/dephell/dephell\u003e`_ (2020) – Python project management. Manage packages: convert between formats, lock, install, resolve, isolate, test, build graph, show outdated, audit. Manage venvs, build package, bump version.\n\n* `facebookincubator/xar \u003chttps://github.com/facebookincubator/xar\u003e`_ (2019) – XAR lets you package many files into a single self-contained executable file. This makes it easy to distribute and install.\n* `getsentry/freight \u003chttps://github.com/getsentry/freight\u003e`_ (2020) – A service which aims to make application deployments better.\n* `armadaplatform/armada \u003chttps://github.com/armadaplatform/armada\u003e`_ (2017) – Complete solution for development, deployment, configuration and discovery of microservices.\n* `cloudify-cosmo/wagon \u003chttps://github.com/cloudify-cosmo/wagon\u003e`_ (2018) – Creates wheel-based archives to allow portable offline installation of Python packages and their dependencies.\n* `sdispater/poet \u003chttps://github.com/sdispater/poet\u003e`_ (2017, experimental) – Declare, manage and install dependencies of Python projects – inspired by ``cargo``.\n* `jamesabel/osnap \u003chttps://github.com/jamesabel/osnap\u003e`_ (2019) – Deliver self-contained Python applications to end users for Windows and OSX/MacOS.\n* `glyph/venvdotapp \u003chttps://github.com/glyph/venvdotapp\u003e`_ - Virtualenv to NSBundle (MacOS) packager.\n* `mherrmann/fbs \u003chttps://github.com/mherrmann/fbs\u003e`_ (2018) – Create cross-platform desktop apps in minutes, not months.\n* `PyAr/fades \u003chttps://github.com/PyAr/fades\u003e`_ (2018) – fades is a system that automatically handles the virtualenvs in the cases normally found when writing scripts and simple programs, and even helps to administer big projects.\n* `flatpak \u003chttps://github.com/flatpak/flatpak\u003e`_ (2017) – Linux application sandboxing and distribution framework.\n* `jonparrott/noel \u003chttps://github.com/jonparrott/noel\u003e`_ (2016) – Easily deploy applications to Kubernetes.\n* `0xadada/dockdj \u003chttps://github.com/0xadada/dockdj\u003e`_ (2015, unmaintained) – Building 12-factor Python / Django web apps Docker images and deploying them to AWS.\n* `mattmakai/underwear \u003chttps://github.com/mattmakai/underwear\u003e`_ (2015) – Dead simple LAMP-stack deployments for Python-powered web applications.\n* `conda/constructor \u003chttps://github.com/conda/constructor\u003e`_ (2020) – A tool for creating installers from conda packages.\n* `itsjohncs/superzippy \u003chttps://github.com/itsjohncs/superzippy\u003e`_ (2018) – A simple tool for turning a multi-file, multi-dependency Python script into a single file.\n\n\n.. |Travis CI| image:: https://api.travis-ci.org/jhermann/ezpy.svg\n    :target: https://travis-ci.org/jhermann/ezpy\n.. |Coveralls| image:: https://img.shields.io/coveralls/jhermann/ezpy.svg\n    :target: https://coveralls.io/r/jhermann/ezpy\n.. |GitHub Issues| image:: https://img.shields.io/github/issues/jhermann/ezpy.svg\n    :target: https://github.com/jhermann/ezpy/issues\n.. |License| image:: https://img.shields.io/pypi/l/ezpy.svg\n    :target: https://github.com/jhermann/ezpy/blob/master/LICENSE\n.. |Development Status| image:: https://img.shields.io/pypi/status/ezpy.svg\n    :target: https://pypi.python.org/pypi/ezpy/\n.. |Latest Version| image:: https://img.shields.io/pypi/v/ezpy.svg\n    :target: https://pypi.python.org/pypi/ezpy/\n.. |Download format| image:: https://img.shields.io/pypi/format/ezpy.svg\n    :target: https://pypi.python.org/pypi/ezpy/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjhermann%2Fezpy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjhermann%2Fezpy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjhermann%2Fezpy/lists"}