Update the list command

This commit is contained in:
Valentin Niess
2025-05-21 21:23:30 +02:00
parent fa3ec89228
commit eb05b77a85
8 changed files with 47 additions and 117 deletions

View File

@@ -3,8 +3,7 @@ from pathlib import Path
import shutil
from ...appimage import build_appimage
from ...manylinux import Arch, Downloader, ImageExtractor, LinuxTag, \
PythonExtractor
from ...manylinux import ensure_image, PythonExtractor
from ...utils.tmp import TemporaryDirectory
@@ -21,21 +20,13 @@ def execute(tag, abi):
'''Build a Python AppImage using a Manylinux image
'''
tag, arch = tag.split('_', 1)
tag = LinuxTag.from_brief(tag)
arch = Arch.from_str(arch)
downloader = Downloader(tag=tag, arch=arch)
downloader.download()
image_extractor = ImageExtractor(downloader.default_destination())
image_extractor.extract()
image = ensure_image(tag)
pwd = os.getcwd()
with TemporaryDirectory() as tmpdir:
python_extractor = PythonExtractor(
arch = arch,
prefix = image_extractor.default_destination(),
arch = image.arch,
prefix = image.path,
tag = abi
)
appdir = Path(tmpdir) / 'AppDir'
@@ -44,7 +35,7 @@ def execute(tag, abi):
fullname = '-'.join((
f'{python_extractor.impl}{python_extractor.version.long()}',
abi,
f'{tag}_{arch}'
f'{image.tag}_{image.arch}'
))
destination = f'{fullname}.AppImage'
@@ -52,7 +43,7 @@ def execute(tag, abi):
appdir = str(appdir),
destination = destination
)
shutil.move(
shutil.copy(
Path(tmpdir) / destination,
Path(pwd) / destination
)

View File

@@ -1,8 +1,8 @@
import os
import glob
from pathlib import Path
from ..utils.docker import docker_run
from ..manylinux import ensure_image, PythonVersion
from ..utils.log import log
from ..utils.tmp import TemporaryDirectory
__all__ = ['execute']
@@ -18,26 +18,16 @@ def execute(tag):
'''List python versions installed in a manylinux image
'''
with TemporaryDirectory() as tmpdir:
script = (
'for dir in $(ls /opt/python | grep "^cp[0-9]"); do',
' version=$(/opt/python/$dir/bin/python -c "import sys; ' \
'sys.stdout.write(sys.version.split()[0])")',
' echo "$dir $version"',
'done',
)
if tag.startswith('2_'):
image = 'manylinux_' + tag
else:
image = 'manylinux' + tag
result = docker_run(
'quay.io/pypa/' + image,
script,
capture = True
)
pythons = [line.split() for line in result.split(os.linesep) if line]
image = ensure_image(tag)
for (abi, version) in pythons:
log('LIST', "{:7} -> /opt/python/{:}".format(version, abi))
pythons = []
for path in glob.glob(str(image.path / 'opt/python/cp*')):
path = Path(path)
version = PythonVersion.from_str(path.readlink().name[8:]).long()
pythons.append((path.name, version))
pythons = sorted(pythons)
return pythons
for (abi, version) in pythons:
log('LIST', "{:8} -> /opt/python/{:}".format(version, abi))
return pythons