Created
August 9, 2026 11:31
-
-
Save mgedmin/92f934b9a9691c52ea90da3a4154e93a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/python3 | |
| """ | |
| Make ruff installable on Android phones (via Termux) that don't have enough RAM to compile large Rust programs. | |
| (8 GB of RAM is *not* enough!) | |
| Usage: | |
| pkg install ruff python uv | |
| mkdir ~/wheels | |
| cd ~/wheels | |
| python /path/to/make-fake-ruff-wheel | |
| export UV_FIND_LINKS=~/wheels | |
| now whenever you try to install ruff via uv (e.g. when using tox-uv), it should pick up the .whl file in ~/wheels/. | |
| CAVEAT: currently the version number, the binary size, and the SHA-256 checksum of the ruff binary are hardcoded. | |
| This script will break when a newer version of ruff shows up in Termux repositories. | |
| """ | |
| import sysconfig | |
| import textwrap | |
| import zipfile | |
| class FakeWheelMaker: | |
| name = 'ruff' | |
| version = '0.16.2' | |
| platform_tag = sysconfig.get_platform().replace('-', '_').replace('.', '_') | |
| generator = 'make-fake-ruff-wheel (0.0.1)' | |
| ruff_binary = '/data/data/com.termux/files/usr/bin/ruff' | |
| ruff_binary_sha256 = '596f65e227d102031577f8b1c3699dfa69c9d0b2021351cac075a27cd1c56f07' | |
| ruff_binary_size = 23941808 | |
| def __init__(self): | |
| self.tag = f'py3-none-{self.platform_tag}' | |
| self.filename = f'{self.name}-{self.version}-{self.tag}.whl' | |
| def make(self): | |
| with zipfile.ZipFile(self.filename, 'w') as self.zf: | |
| self.add_files() | |
| def add_file(self, filename, filesystem_source=None, content=None): | |
| if filesystem_source: | |
| self.zf.write(filesystem_source, filename) | |
| elif content: | |
| self.zf.writestr(filename, content) | |
| def add_files(self): | |
| self.add_file( | |
| f'{self.name}-{self.version}.data/scripts/ruff', | |
| filesystem_source=self.ruff_binary | |
| ) | |
| self.add_file( | |
| f'{self.name}-{self.version}.dist-info/METADATA', | |
| content=textwrap.dedent(f''' | |
| Metadata-Version: 2.4 | |
| Name: {self.name} | |
| Version: {self.version} | |
| Home-Page: https://docs.astral.sh/ruff | |
| License-Expression: MIT | |
| '''.lstrip('\n') | |
| ), | |
| ) | |
| self.add_file( | |
| f'{self.name}-{self.version}.dist-info/WHEEL', | |
| content=textwrap.dedent(f''' | |
| Wheel-Version: 1.0 | |
| Generator: {self.generator} | |
| Root-Is-Purelib: false | |
| Tag: {self.tag} | |
| '''.lstrip('\n') | |
| ), | |
| ) | |
| self.add_file( | |
| f'{self.name}-{self.version}.dist-info/RECORD', | |
| content=textwrap.dedent(f''' | |
| {self.name}-{self.version}.data/scripts/ruff,sha256={self.ruff_binary_sha256},{self.ruff_binary_size} | |
| {self.name}-{self.version}.dist-info/METADATA,, | |
| {self.name}-{self.version}.dist-info/WHEEL,, | |
| {self.name}-{self.version}.dist-info/RECORD,, | |
| '''.lstrip('\n') | |
| ), | |
| ) | |
| def main(): | |
| maker = FakeWheelMaker() | |
| maker.make() | |
| print(f"Created {maker.filename}") | |
| if __name__ == "__main__": | |
| main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment