Skip to content

Instantly share code, notes, and snippets.

@mgedmin
Created August 9, 2026 11:31
Show Gist options
  • Select an option

  • Save mgedmin/92f934b9a9691c52ea90da3a4154e93a to your computer and use it in GitHub Desktop.

Select an option

Save mgedmin/92f934b9a9691c52ea90da3a4154e93a to your computer and use it in GitHub Desktop.
#!/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