| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- import os
- from pathlib import Path
- import tarfile
- from ...appimage import build_appimage
- from ...manylinux import ensure_image, PythonExtractor
- from ...utils.fs import copy_file, copy_tree
- from ...utils.log import log
- from ...utils.tmp import TemporaryDirectory
- __all__ = ['execute']
- def _unpack_args(args):
- '''Unpack command line arguments
- '''
- return args.tag, args.abi, args.bare, args.clean, args.no_packaging
- def execute(tag, abi, bare=False, clean=False, no_packaging=False):
- '''Build a Python AppImage using a Manylinux image
- '''
- image = ensure_image(tag, clean=clean)
- pwd = os.getcwd()
- with TemporaryDirectory() as tmpdir:
- python_extractor = PythonExtractor(
- arch = image.arch,
- prefix = image.path,
- tag = abi
- )
- appdir = Path(tmpdir) / 'AppDir'
- appify = not bare
- python_extractor.extract(appdir, appify=appify)
- fullname = '-'.join((
- f'{python_extractor.impl}{python_extractor.version.long()}',
- abi,
- f'{image.tag}_{image.arch}'
- ))
- if no_packaging:
- copy_tree(
- Path(tmpdir) / 'AppDir',
- Path(pwd) / fullname
- )
- elif bare:
- log('COMPRESS', fullname)
- destination = f'{fullname}.tar.gz'
- tar_path = Path(tmpdir) / destination
- with tarfile.open(tar_path, "w:gz") as tar:
- tar.add(appdir, arcname=fullname)
- copy_file(
- tar_path,
- Path(pwd) / destination
- )
- else:
- destination = f'{fullname}.AppImage'
- build_appimage(
- appdir = str(appdir),
- arch = str(image.arch),
- destination = destination
- )
- copy_file(
- Path(tmpdir) / destination,
- Path(pwd) / destination
- )
|