{"id":17928745,"url":"https://github.com/bwoodsend/polycotylus","last_synced_at":"2026-04-12T05:34:27.896Z","repository":{"id":196726157,"uuid":"532284545","full_name":"bwoodsend/polycotylus","owner":"bwoodsend","description":"Convert Python packages/applications to native Linux distribution packages.","archived":false,"fork":false,"pushed_at":"2026-03-20T14:54:42.000Z","size":1917,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-03-21T06:53:14.264Z","etag":null,"topics":["alpine","archlinux","debian","fedora","linux","manjaro","packaging","python","voidlinux"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bwoodsend.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-09-03T14:32:33.000Z","updated_at":"2026-03-20T14:54:55.000Z","dependencies_parsed_at":"2023-12-16T22:40:55.336Z","dependency_job_id":"1f731cf9-d0fc-4d8f-af7e-2b6c4d4ee1d0","html_url":"https://github.com/bwoodsend/polycotylus","commit_stats":null,"previous_names":["bwoodsend/polycotylus"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bwoodsend/polycotylus","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bwoodsend%2Fpolycotylus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bwoodsend%2Fpolycotylus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bwoodsend%2Fpolycotylus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bwoodsend%2Fpolycotylus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bwoodsend","download_url":"https://codeload.github.com/bwoodsend/polycotylus/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bwoodsend%2Fpolycotylus/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31705574,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-12T05:11:36.334Z","status":"ssl_error","status_checked_at":"2026-04-12T05:11:27.332Z","response_time":58,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["alpine","archlinux","debian","fedora","linux","manjaro","packaging","python","voidlinux"],"created_at":"2024-10-28T21:05:10.321Z","updated_at":"2026-04-12T05:34:27.891Z","avatar_url":"https://github.com/bwoodsend.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"=======================\nWelcome to polycotylus!\n=======================\n\n∘\n`MIT license \u003chttps://github.com/bwoodsend/polycotylus/blob/master/LICENSE\u003e`_\n∘\nP̶y̶P̶I\n∘\nD̶o̶c̶u̶m̶e̶n̶t̶a̶t̶i̶o̶n\n∘\n`Source code \u003chttps://github.com/bwoodsend/polycotylus\u003e`_\n∘\n`Bug reports \u003chttps://github.com/bwoodsend/polycotylus/issues\u003e`_\n\nPolycotylus converts Python packages into native Linux distribution packages\nsuch as RPMs, DEBs or APKs.\n\nPolycotylus builds on each target Linux distribution, dodging the usual Linux\nnightmare that is ABI compatibility, using each distribution's native packaging\nsystem. It uses Docker to virtualize each Linux distribution and Qemu to\nvirtualize almost any architecture meaning that you can build for any supported\ndistribution or architecture from a single machine. You can even build on\nWindows or macOS. You can build apps for Linux phones: running ``polycotylus\nmanjaro --architecture aarch64`` will build an app installable on a phone\nrunning Manjaro or ``polycotylus alpine --architecture aarch64`` will build a\n`postmarketOS \u003chttps://postmarketos.org/\u003e`_ compatible app.\n\nUnlike PyInstaller, Flatpaks or Snaps, polycotylus does not bundle dependencies\ninto one fat package – instead, dependencies (including Python itself) are\ndeclared as such in the package's metadata where the end user's system package\nmanager will see and act upon them. This makes the packages tiny, updates\nmodular and propagation of security patches for vulnerabilities in your\ndependencies no longer your problem. Complex system dependencies such as\nGStreamer or GTK can be declared in addition to PyPI packages turning them from\npackaging nightmares into *just another dependency*. This approach also solves\nthe standard UNIX question of *should I include libXYZ in my package* to which\nthe answers *yes* and *no* are often simultaneously wrong.\n\nPolycotylus doesn't just dump code into an archive and hope for the best – it\nverifies it as well. Packages are installed into a clean, minimal Docker\ncontainer in which it then runs your test suite. It should be almost impossible\nto forget a dependency or miss a data file without polycotylus letting you know.\n\nFor GUI applications, using a system package manager also allows you to add\n*desktop integration*. You can register your application so that launch menus\n(e.g. Gnome's App tiles) and file browsers know that your application exists,\nhave icons and descriptions, and are aware of their supported file types.\n\n\nSupported distributions\n.......................\n\nPolycotylus is limited by a hard constraint in that it can not support any\ntarget Linux distribution that does not provide ``setuptools\u003e=61.0`` in its\nofficial package repositories. This unfortunately rules out most of the\n*stable*/long term support distributions including all stable branches of Debian\nexcept 13, Ubuntu \u003c23.04, SLES, OpenSUSE Leap and all of the RedHat/CentOS-like\ndistributions par Fedora.\n\n=============  ===========================================\nDistributions  Supported versions\n=============  ===========================================\nAlpine_        3.17-3.23, edge\nArch_          rolling\nDebian_        13, 14 (prerelease)\nFedora_        37-43, 44 (prerelease), 45 (rawhide)\nManjaro_       rolling\nO̶p̶e̶n̶S̶U̶S̶E       Redacted\nUbuntu_        24.04-25.10, 26.04 (prerelease)\nVoid_          rolling\n=============  ===========================================\n\n.. _Alpine: https://alpinelinux.org/\n.. _Arch: https://archlinux.org/\n.. _Debian: https://www.debian.org/\n.. _Fedora: https://fedoraproject.org/\n.. _Manjaro: https://manjaro.org/\n.. _Ubuntu: https://ubuntu.com/\n.. _Void: https://voidlinux.org/\n\n\nDevelopment status\n..................\n\nThis project is missing some key functionality that I'd consider it needs before\ngoing on PyPI. To use this project as it is right now, install ``polycotylus``\nfrom version control (instructions below). It does have (what I like to think of\nas comprehensive) documentation but it needs to be built from source too:\n\n.. code-block:: bash\n\n    git clone git@github.com:bwoodsend/polycotylus\n    cd polycotylus\n    # Maybe create and activate a virtual environment\n    pip install -e .\n    pip install -r docs/requirements.txt\n    cd docs\n    make html\n    xdg-open build/html/index.html\n\nIn terms of feature completeness:\n\n* The biggest gaping feature gap is polycotylus's requirement that all\n  dependencies are already available on each target distribution's repositories.\n  If your application is made up of multiple custom packages or depends on an\n  unavailable 3rd party package then polycotylus is useless to you. The plan is\n  to facilitate making personal package repositories, where builds for packages\n  can depend on other packages in the personal repository. Or possibly it's just\n  to create a ``polycotylus --inlcude-project=../other-project`` flag – I'm not\n  sure I like either option...\n\nOther, less significant but more achievable things I'd like to do:\n\n* Custom MIME Type support (i.e. declaring a new made-up file suffix and its\n  association with an application).\n\n* See if I can get hardware related functionality (audio, USB) to work with\n  Docker.\n\nThat said, if you don't need any of the above then polycotylus should work for\nyou.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbwoodsend%2Fpolycotylus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbwoodsend%2Fpolycotylus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbwoodsend%2Fpolycotylus/lists"}