Current Dir: /snap/core22/2955/usr/bin/
[FILE] aa-enabled [ edit | delete | rename ]
[FILE] aa-exec [ edit | delete | rename ]
[FILE] aa-features-abi [ edit | delete | rename ]
[FILE] addpart [ edit | delete | rename ]
[FILE] arch [ edit | delete | rename ]
[FILE] awk [ edit | delete | rename ]
[FILE] b2sum [ edit | delete | rename ]
[FILE] base32 [ edit | delete | rename ]
[FILE] base64 [ edit | delete | rename ]
[FILE] basename [ edit | delete | rename ]
[FILE] basenc [ edit | delete | rename ]
[FILE] bash [ edit | delete | rename ]
[FILE] bashbug [ edit | delete | rename ]
[FILE] bootctl [ edit | delete | rename ]
[FILE] bunzip2 [ edit | delete | rename ]
[FILE] busctl [ edit | delete | rename ]
[FILE] bzcat [ edit | delete | rename ]
[FILE] bzcmp [ edit | delete | rename ]
[FILE] bzdiff [ edit | delete | rename ]
[FILE] bzegrep [ edit | delete | rename ]
[FILE] bzexe [ edit | delete | rename ]
[FILE] bzfgrep [ edit | delete | rename ]
[FILE] bzgrep [ edit | delete | rename ]
[FILE] bzip2 [ edit | delete | rename ]
[FILE] bzip2recover [ edit | delete | rename ]
[FILE] bzless [ edit | delete | rename ]
[FILE] bzmore [ edit | delete | rename ]
[FILE] captoinfo [ edit | delete | rename ]
[FILE] cat [ edit | delete | rename ]
[FILE] chage [ edit | delete | rename ]
[FILE] chardet [ edit | delete | rename ]
[FILE] chardetect [ edit | delete | rename ]
[FILE] chattr [ edit | delete | rename ]
[FILE] chcon [ edit | delete | rename ]
[FILE] chfn [ edit | delete | rename ]
[FILE] chgrp [ edit | delete | rename ]
[FILE] chmod [ edit | delete | rename ]
[FILE] choom [ edit | delete | rename ]
[FILE] chown [ edit | delete | rename ]
[FILE] chrt [ edit | delete | rename ]
[FILE] chsh [ edit | delete | rename ]
[FILE] cksum [ edit | delete | rename ]
[FILE] clear [ edit | delete | rename ]
[FILE] clear_console [ edit | delete | rename ]
[FILE] cloud-id [ edit | delete | rename ]
[FILE] cloud-init [ edit | delete | rename ]
[FILE] cloud-init-per [ edit | delete | rename ]
[FILE] cmp [ edit | delete | rename ]
[FILE] comm [ edit | delete | rename ]
[FILE] console-conf [ edit | delete | rename ]
[FILE] core-sshd-host-keygen [ edit | delete | rename ]
[FILE] cp [ edit | delete | rename ]
[FILE] csplit [ edit | delete | rename ]
[FILE] ctstat [ edit | delete | rename ]
[FILE] cut [ edit | delete | rename ]
[FILE] cvtsudoers [ edit | delete | rename ]
[FILE] c_rehash [ edit | delete | rename ]
[FILE] dash [ edit | delete | rename ]
[FILE] date [ edit | delete | rename ]
[FILE] dbus-cleanup-sockets [ edit | delete | rename ]
[FILE] dbus-daemon [ edit | delete | rename ]
[FILE] dbus-monitor [ edit | delete | rename ]
[FILE] dbus-run-session [ edit | delete | rename ]
[FILE] dbus-send [ edit | delete | rename ]
[FILE] dbus-update-activation-environment [ edit | delete | rename ]
[FILE] dbus-uuidgen [ edit | delete | rename ]
[FILE] dd [ edit | delete | rename ]
[FILE] delpart [ edit | delete | rename ]
[FILE] df [ edit | delete | rename ]
[FILE] dh_bash-completion [ edit | delete | rename ]
[FILE] diff [ edit | delete | rename ]
[FILE] diff3 [ edit | delete | rename ]
[FILE] dir [ edit | delete | rename ]
[FILE] dircolors [ edit | delete | rename ]
[FILE] dirname [ edit | delete | rename ]
[FILE] dmesg [ edit | delete | rename ]
[FILE] dnsdomainname [ edit | delete | rename ]
[FILE] domainname [ edit | delete | rename ]
[FILE] dpkg-deb [ edit | delete | rename ]
[FILE] dpkg-realpath [ edit | delete | rename ]
[FILE] du [ edit | delete | rename ]
[FILE] ec2metadata [ edit | delete | rename ]
[FILE] echo [ edit | delete | rename ]
[FILE] editor [ edit | delete | rename ]
[FILE] egrep [ edit | delete | rename ]
[FILE] env [ edit | delete | rename ]
[FILE] ex [ edit | delete | rename ]
[FILE] expand [ edit | delete | rename ]
[FILE] expiry [ edit | delete | rename ]
[FILE] expr [ edit | delete | rename ]
[FILE] factor [ edit | delete | rename ]
[FILE] faillog [ edit | delete | rename ]
[FILE] fallocate [ edit | delete | rename ]
[FILE] false [ edit | delete | rename ]
[FILE] fgrep [ edit | delete | rename ]
[FILE] finalrd [ edit | delete | rename ]
[FILE] fincore [ edit | delete | rename ]
[FILE] find [ edit | delete | rename ]
[FILE] findmnt [ edit | delete | rename ]
[FILE] flock [ edit | delete | rename ]
[FILE] fmt [ edit | delete | rename ]
[FILE] fold [ edit | delete | rename ]
[FILE] free [ edit | delete | rename ]
[FILE] gdbserver [ edit | delete | rename ]
[FILE] getconf [ edit | delete | rename ]
[FILE] getent [ edit | delete | rename ]
[FILE] getopt [ edit | delete | rename ]
[FILE] gpasswd [ edit | delete | rename ]
[FILE] gpgv [ edit | delete | rename ]
[FILE] grep [ edit | delete | rename ]
[FILE] groups [ edit | delete | rename ]
[FILE] growpart [ edit | delete | rename ]
[FILE] gunzip [ edit | delete | rename ]
[FILE] gzexe [ edit | delete | rename ]
[FILE] gzip [ edit | delete | rename ]
[FILE] hardlink [ edit | delete | rename ]
[FILE] head [ edit | delete | rename ]
[FILE] helpztags [ edit | delete | rename ]
[FILE] hostid [ edit | delete | rename ]
[FILE] hostname [ edit | delete | rename ]
[FILE] hostnamectl [ edit | delete | rename ]
[FILE] i386 [ edit | delete | rename ]
[FILE] iconv [ edit | delete | rename ]
[FILE] id [ edit | delete | rename ]
[FILE] infocmp [ edit | delete | rename ]
[FILE] infotocap [ edit | delete | rename ]
[FILE] install [ edit | delete | rename ]
[FILE] ionice [ edit | delete | rename ]
[FILE] ip [ edit | delete | rename ]
[FILE] ipcmk [ edit | delete | rename ]
[FILE] ipcrm [ edit | delete | rename ]
[FILE] ipcs [ edit | delete | rename ]
[FILE] iptables-xml [ edit | delete | rename ]
[FILE] ischroot [ edit | delete | rename ]
[FILE] join [ edit | delete | rename ]
[FILE] journalctl [ edit | delete | rename ]
[FILE] json-patch-jsondiff [ edit | delete | rename ]
[FILE] jsondiff [ edit | delete | rename ]
[FILE] jsonpatch [ edit | delete | rename ]
[FILE] jsonpointer [ edit | delete | rename ]
[FILE] jsonschema [ edit | delete | rename ]
[FILE] kernel-install [ edit | delete | rename ]
[FILE] kill [ edit | delete | rename ]
[FILE] kmod [ edit | delete | rename ]
[FILE] kmodsign [ edit | delete | rename ]
[FILE] last [ edit | delete | rename ]
[FILE] lastb [ edit | delete | rename ]
[FILE] lastlog [ edit | delete | rename ]
[FILE] lcf [ edit | delete | rename ]
[FILE] ldd [ edit | delete | rename ]
[FILE] less [ edit | delete | rename ]
[FILE] lessecho [ edit | delete | rename ]
[FILE] lessfile [ edit | delete | rename ]
[FILE] lesskey [ edit | delete | rename ]
[FILE] lesspipe [ edit | delete | rename ]
[FILE] link [ edit | delete | rename ]
[FILE] linux32 [ edit | delete | rename ]
[FILE] linux64 [ edit | delete | rename ]
[FILE] ln [ edit | delete | rename ]
[FILE] lnstat [ edit | delete | rename ]
[FILE] locale [ edit | delete | rename ]
[FILE] locale-check [ edit | delete | rename ]
[FILE] localectl [ edit | delete | rename ]
[FILE] localedef [ edit | delete | rename ]
[FILE] logger [ edit | delete | rename ]
[FILE] login [ edit | delete | rename ]
[FILE] loginctl [ edit | delete | rename ]
[FILE] logname [ edit | delete | rename ]
[FILE] ls [ edit | delete | rename ]
[FILE] lsattr [ edit | delete | rename ]
[FILE] lsblk [ edit | delete | rename ]
[FILE] lscpu [ edit | delete | rename ]
[FILE] lsipc [ edit | delete | rename ]
[FILE] lslocks [ edit | delete | rename ]
[FILE] lslogins [ edit | delete | rename ]
[FILE] lsmem [ edit | delete | rename ]
[FILE] lsmod [ edit | delete | rename ]
[FILE] lsns [ edit | delete | rename ]
[FILE] man [ edit | delete | rename ]
[FILE] mawk [ edit | delete | rename ]
[FILE] mcookie [ edit | delete | rename ]
[FILE] md5sum [ edit | delete | rename ]
[FILE] md5sum.textutils [ edit | delete | rename ]
[FILE] mesg [ edit | delete | rename ]
[FILE] mkdir [ edit | delete | rename ]
[FILE] mkfifo [ edit | delete | rename ]
[FILE] mknod [ edit | delete | rename ]
[FILE] mksquashfs [ edit | delete | rename ]
[FILE] mkswapfile [ edit | delete | rename ]
[FILE] mktemp [ edit | delete | rename ]
[FILE] more [ edit | delete | rename ]
[FILE] mount [ edit | delete | rename ]
[FILE] mountpoint [ edit | delete | rename ]
[FILE] mv [ edit | delete | rename ]
[FILE] namei [ edit | delete | rename ]
[FILE] nawk [ edit | delete | rename ]
[FILE] nc [ edit | delete | rename ]
[FILE] nc.openbsd [ edit | delete | rename ]
[FILE] netcat [ edit | delete | rename ]
[FILE] networkctl [ edit | delete | rename ]
[FILE] newgrp [ edit | delete | rename ]
[FILE] nice [ edit | delete | rename ]
[FILE] nisdomainname [ edit | delete | rename ]
[FILE] nl [ edit | delete | rename ]
[FILE] nohup [ edit | delete | rename ]
[FILE] nproc [ edit | delete | rename ]
[FILE] nsenter [ edit | delete | rename ]
[FILE] nstat [ edit | delete | rename ]
[FILE] numfmt [ edit | delete | rename ]
[FILE] od [ edit | delete | rename ]
[FILE] openssl [ edit | delete | rename ]
[FILE] p11-kit [ edit | delete | rename ]
[FILE] p11tool [ edit | delete | rename ]
[FILE] pager [ edit | delete | rename ]
[FILE] partx [ edit | delete | rename ]
[FILE] passwd [ edit | delete | rename ]
[FILE] paste [ edit | delete | rename ]
[FILE] pathchk [ edit | delete | rename ]
[FILE] pdb3 [ edit | delete | rename ]
[FILE] pdb3.10 [ edit | delete | rename ]
[FILE] perl [ edit | delete | rename ]
[FILE] perl5.34.0 [ edit | delete | rename ]
[FILE] pgrep [ edit | delete | rename ]
[FILE] pidof [ edit | delete | rename ]
[FILE] pidwait [ edit | delete | rename ]
[FILE] ping [ edit | delete | rename ]
[FILE] ping4 [ edit | delete | rename ]
[FILE] ping6 [ edit | delete | rename ]
[FILE] pinky [ edit | delete | rename ]
[FILE] pkaction [ edit | delete | rename ]
[FILE] pkcheck [ edit | delete | rename ]
[FILE] pkcs11-tool [ edit | delete | rename ]
[FILE] pkill [ edit | delete | rename ]
[FILE] pkttyagent [ edit | delete | rename ]
[FILE] pldd [ edit | delete | rename ]
[FILE] plymouth [ edit | delete | rename ]
[FILE] pmap [ edit | delete | rename ]
[FILE] pr [ edit | delete | rename ]
[FILE] printenv [ edit | delete | rename ]
[FILE] printf [ edit | delete | rename ]
[FILE] prlimit [ edit | delete | rename ]
[FILE] ps [ edit | delete | rename ]
[FILE] ptx [ edit | delete | rename ]
[FILE] pwd [ edit | delete | rename ]
[FILE] pwdx [ edit | delete | rename ]
[FILE] py3clean [ edit | delete | rename ]
[FILE] py3compile [ edit | delete | rename ]
[FILE] py3versions [ edit | delete | rename ]
[FILE] pybabel [ edit | delete | rename ]
[FILE] pybabel-python3 [ edit | delete | rename ]
[FILE] pydoc3 [ edit | delete | rename ]
[FILE] pydoc3.10 [ edit | delete | rename ]
[FILE] pygettext3 [ edit | delete | rename ]
[FILE] pygettext3.10 [ edit | delete | rename ]
[FILE] pyserial-miniterm [ edit | delete | rename ]
[FILE] pyserial-ports [ edit | delete | rename ]
[FILE] python3 [ edit | delete | rename ]
[FILE] python3.10 [ edit | delete | rename ]
[FILE] rbash [ edit | delete | rename ]
[FILE] rcp [ edit | delete | rename ]
[FILE] rdma [ edit | delete | rename ]
[FILE] readlink [ edit | delete | rename ]
[FILE] realpath [ edit | delete | rename ]
[FILE] renice [ edit | delete | rename ]
[FILE] reset [ edit | delete | rename ]
[FILE] resizepart [ edit | delete | rename ]
[FILE] resolvectl [ edit | delete | rename ]
[FILE] rev [ edit | delete | rename ]
[FILE] rgrep [ edit | delete | rename ]
[FILE] rlogin [ edit | delete | rename ]
[FILE] rm [ edit | delete | rename ]
[FILE] rmdir [ edit | delete | rename ]
[FILE] routef [ edit | delete | rename ]
[FILE] routel [ edit | delete | rename ]
[FILE] rsh [ edit | delete | rename ]
[FILE] rtstat [ edit | delete | rename ]
[FILE] run-parts [ edit | delete | rename ]
[FILE] runcon [ edit | delete | rename ]
[FILE] rview [ edit | delete | rename ]
[FILE] savelog [ edit | delete | rename ]
[FILE] sbattach [ edit | delete | rename ]
[FILE] sbkeysync [ edit | delete | rename ]
[FILE] sbsiglist [ edit | delete | rename ]
[FILE] sbsign [ edit | delete | rename ]
[FILE] sbvarsign [ edit | delete | rename ]
[FILE] sbverify [ edit | delete | rename ]
[FILE] scp [ edit | delete | rename ]
[FILE] script [ edit | delete | rename ]
[FILE] scriptlive [ edit | delete | rename ]
[FILE] scriptreplay [ edit | delete | rename ]
[FILE] sdiff [ edit | delete | rename ]
[FILE] sed [ edit | delete | rename ]
[FILE] select-editor [ edit | delete | rename ]
[FILE] sensible-browser [ edit | delete | rename ]
[FILE] sensible-editor [ edit | delete | rename ]
[FILE] sensible-pager [ edit | delete | rename ]
[FILE] seq [ edit | delete | rename ]
[FILE] setarch [ edit | delete | rename ]
[FILE] setpriv [ edit | delete | rename ]
[FILE] setsid [ edit | delete | rename ]
[FILE] setterm [ edit | delete | rename ]
[FILE] sftp [ edit | delete | rename ]
[FILE] sg [ edit | delete | rename ]
[FILE] sh [ edit | delete | rename ]
[FILE] sha1sum [ edit | delete | rename ]
[FILE] sha224sum [ edit | delete | rename ]
[FILE] sha256sum [ edit | delete | rename ]
[FILE] sha384sum [ edit | delete | rename ]
[FILE] sha512sum [ edit | delete | rename ]
[FILE] shred [ edit | delete | rename ]
[FILE] shuf [ edit | delete | rename ]
[FILE] skill [ edit | delete | rename ]
[FILE] slabtop [ edit | delete | rename ]
[FILE] sleep [ edit | delete | rename ]
[FILE] slogin [ edit | delete | rename ]
[FILE] snap [ edit | delete | rename ]
[FILE] snapctl [ edit | delete | rename ]
[FILE] snice [ edit | delete | rename ]
[FILE] sort [ edit | delete | rename ]
[FILE] splash-client [ edit | delete | rename ]
[FILE] split [ edit | delete | rename ]
[FILE] sqfscat [ edit | delete | rename ]
[FILE] sqfstar [ edit | delete | rename ]
[FILE] ss [ edit | delete | rename ]
[FILE] ssh [ edit | delete | rename ]
[FILE] ssh-add [ edit | delete | rename ]
[FILE] ssh-agent [ edit | delete | rename ]
[FILE] ssh-argv0 [ edit | delete | rename ]
[FILE] ssh-copy-id [ edit | delete | rename ]
[FILE] ssh-keygen [ edit | delete | rename ]
[FILE] ssh-keyscan [ edit | delete | rename ]
[FILE] stat [ edit | delete | rename ]
[FILE] stdbuf [ edit | delete | rename ]
[FILE] stty [ edit | delete | rename ]
[FILE] su [ edit | delete | rename ]
[FILE] sudo [ edit | delete | rename ]
[FILE] sudoedit [ edit | delete | rename ]
[FILE] sudoreplay [ edit | delete | rename ]
[FILE] sum [ edit | delete | rename ]
[FILE] sync [ edit | delete | rename ]
[FILE] systemctl [ edit | delete | rename ]
[FILE] systemd [ edit | delete | rename ]
[FILE] systemd-analyze [ edit | delete | rename ]
[FILE] systemd-ask-password [ edit | delete | rename ]
[FILE] systemd-cat [ edit | delete | rename ]
[FILE] systemd-cgls [ edit | delete | rename ]
[FILE] systemd-cgtop [ edit | delete | rename ]
[FILE] systemd-cryptenroll [ edit | delete | rename ]
[FILE] systemd-delta [ edit | delete | rename ]
[FILE] systemd-detect-virt [ edit | delete | rename ]
[FILE] systemd-escape [ edit | delete | rename ]
[FILE] systemd-hwdb [ edit | delete | rename ]
[FILE] systemd-id128 [ edit | delete | rename ]
[FILE] systemd-inhibit [ edit | delete | rename ]
[FILE] systemd-machine-id-setup [ edit | delete | rename ]
[FILE] systemd-mount [ edit | delete | rename ]
[FILE] systemd-notify [ edit | delete | rename ]
[FILE] systemd-path [ edit | delete | rename ]
[FILE] systemd-run [ edit | delete | rename ]
[FILE] systemd-socket-activate [ edit | delete | rename ]
[FILE] systemd-stdio-bridge [ edit | delete | rename ]
[FILE] systemd-sysext [ edit | delete | rename ]
[FILE] systemd-sysusers [ edit | delete | rename ]
[FILE] systemd-tmpfiles [ edit | delete | rename ]
[FILE] systemd-tty-ask-password-agent [ edit | delete | rename ]
[FILE] systemd-umount [ edit | delete | rename ]
[FILE] tabs [ edit | delete | rename ]
[FILE] tac [ edit | delete | rename ]
[FILE] tail [ edit | delete | rename ]
[FILE] tar [ edit | delete | rename ]
[FILE] taskset [ edit | delete | rename ]
[FILE] tee [ edit | delete | rename ]
[FILE] tempfile [ edit | delete | rename ]
[FILE] test [ edit | delete | rename ]
[FILE] tic [ edit | delete | rename ]
[FILE] timedatectl [ edit | delete | rename ]
[FILE] timedatectl.real [ edit | delete | rename ]
[FILE] timeout [ edit | delete | rename ]
[FILE] tload [ edit | delete | rename ]
[FILE] toe [ edit | delete | rename ]
[FILE] top [ edit | delete | rename ]
[FILE] touch [ edit | delete | rename ]
[FILE] tput [ edit | delete | rename ]
[FILE] tr [ edit | delete | rename ]
[FILE] true [ edit | delete | rename ]
[FILE] truncate [ edit | delete | rename ]
[FILE] tset [ edit | delete | rename ]
[FILE] tsort [ edit | delete | rename ]
[FILE] tty [ edit | delete | rename ]
[FILE] tzselect [ edit | delete | rename ]
[FILE] ucf [ edit | delete | rename ]
[FILE] ucfq [ edit | delete | rename ]
[FILE] ucfr [ edit | delete | rename ]
[FILE] uclampset [ edit | delete | rename ]
[FILE] udevadm [ edit | delete | rename ]
[FILE] umount [ edit | delete | rename ]
[FILE] uname [ edit | delete | rename ]
[FILE] uncompress [ edit | delete | rename ]
[FILE] unexpand [ edit | delete | rename ]
[FILE] uniq [ edit | delete | rename ]
[FILE] unlink [ edit | delete | rename ]
[FILE] unshare [ edit | delete | rename ]
[FILE] unsquashfs [ edit | delete | rename ]
[FILE] update-alternatives [ edit | delete | rename ]
[FILE] uptime [ edit | delete | rename ]
[FILE] users [ edit | delete | rename ]
[FILE] utmpdump [ edit | delete | rename ]
[FILE] vcs-run [ edit | delete | rename ]
[FILE] vdir [ edit | delete | rename ]
[FILE] vi [ edit | delete | rename ]
[FILE] view [ edit | delete | rename ]
[FILE] vim.tiny [ edit | delete | rename ]
[FILE] vmstat [ edit | delete | rename ]
[FILE] w [ edit | delete | rename ]
[FILE] wall [ edit | delete | rename ]
[FILE] watch [ edit | delete | rename ]
[FILE] wc [ edit | delete | rename ]
[FILE] wdctl [ edit | delete | rename ]
[FILE] whereis [ edit | delete | rename ]
[FILE] which [ edit | delete | rename ]
[FILE] which.debianutils [ edit | delete | rename ]
[FILE] who [ edit | delete | rename ]
[FILE] whoami [ edit | delete | rename ]
[FILE] wpa_passphrase [ edit | delete | rename ]
[FILE] x86_64 [ edit | delete | rename ]
[FILE] xargs [ edit | delete | rename ]
[FILE] xdg-open [ edit | delete | rename ]
[FILE] xdg-settings [ edit | delete | rename ]
[FILE] xxd [ edit | delete | rename ]
[FILE] yes [ edit | delete | rename ]
[FILE] ypdomainname [ edit | delete | rename ]
[FILE] zcat [ edit | delete | rename ]
[FILE] zcmp [ edit | delete | rename ]
[FILE] zdiff [ edit | delete | rename ]
[FILE] zdump [ edit | delete | rename ]
[FILE] zegrep [ edit | delete | rename ]
[FILE] zfgrep [ edit | delete | rename ]
[FILE] zforce [ edit | delete | rename ]
[FILE] zgrep [ edit | delete | rename ]
[FILE] zless [ edit | delete | rename ]
[FILE] zmore [ edit | delete | rename ]
[FILE] znew [ edit | delete | rename ]
[FILE] [ [ edit | delete | rename ]
Viewing: /snap/core22/2955/usr/share/python3/py3versions.py
#! /usr/bin/python3
import os
import re
import sys
_defaults = None
_old_versions = None
_unsupported_versions = None
_supported_versions = ["python%s" % ver.strip() for ver in
os.environ.get('DEBPYTHON3_SUPPORTED', '').split(',')
if ver.strip()]
#_default_version = "python%s" % os.environ.get('DEBPYTHON3_DEFAULT', '')
#if _default_version == 'python':
# _default_version = None
_default_version = None
def read_default(name=None):
global _defaults
from configparser import ConfigParser, NoOptionError
if not _defaults:
if os.path.exists('/usr/share/python3/debian_defaults'):
config = ConfigParser()
defaultsfile = open('/usr/share/python3/debian_defaults')
config.read_file(defaultsfile)
defaultsfile.close()
_defaults = config
if _defaults and name:
try:
value = _defaults.get('DEFAULT', name)
except NoOptionError:
raise ValueError
return value
return None
def version_to_tuple(version):
return tuple(int(part) for part in version.split('.'))
def parse_versions(vstring):
if len(vstring.split(',')) > 2:
raise ValueError('too many arguments provided for X-Python3-Version: min and max only.')
import operator
operators = {None: operator.eq, '=': operator.eq,
'>=': operator.ge, '<=': operator.le,
'<<': operator.lt}
vinfo = {}
exact_versions = set()
version_range = set(supported_versions(version_only=True))
relop_seen = False
for field in vstring.split(','):
field = field.strip()
if field == 'all':
continue
if field in ('current', 'current_ext'):
continue
vinfo.setdefault('versions', set())
ve = re.compile(r'(>=|<=|<<|=)? *(\d\.\d+)$')
m = ve.match(field)
try:
if not m:
raise ValueError('error parsing Python3-Version attribute')
op, v = m.group(1), m.group(2)
vmaj, vmin = v.split('.')
if int(vmaj) < 3:
continue
if op in (None, '='):
exact_versions.add(v)
else:
relop_seen = True
filtop = operators[op]
version_range = [av for av in version_range if filtop(
version_to_tuple(av), version_to_tuple(v))]
except Exception:
raise ValueError('error parsing Python3-Version attribute')
if 'versions' in vinfo:
vinfo['versions'] = exact_versions
if relop_seen:
vinfo['versions'] = exact_versions.union(version_range)
return vinfo
def old_versions(version_only=False):
global _old_versions
if not _old_versions:
try:
value = read_default('old-versions')
_old_versions = [s.strip() for s in value.split(',')]
except ValueError:
_old_versions = []
if version_only:
return [v[6:] for v in _old_versions]
else:
return _old_versions
def unsupported_versions(version_only=False):
global _unsupported_versions
if not _unsupported_versions:
try:
value = read_default('unsupported-versions')
_unsupported_versions = [s.strip() for s in value.split(',')]
except ValueError:
_unsupported_versions = []
if version_only:
return [v[6:] for v in _unsupported_versions]
else:
return _unsupported_versions
def supported_versions(version_only=False):
global _supported_versions,_default_version
default_version()
if not _supported_versions:
try:
value = read_default('supported-versions')
_supported_versions = [s.strip() for s in value.split(',')]
except ValueError:
cmd = ['/usr/bin/apt-cache', '--no-all-versions',
'show', 'python3-all']
try:
import subprocess
p = subprocess.Popen(cmd, bufsize=1,
shell=False, stdout=subprocess.PIPE)
fd = p.stdout
except ImportError:
fd = os.popen(' '.join(cmd))
depends = None
for line in fd:
if line.startswith('Depends:'):
depends = line.split(':', 1)[1].strip().split(',')
fd.close()
depends = [re.sub(r'\s*(\S+)[ (]?.*', r'\1', s) for s in depends]
_supported_versions = depends
default = _supported_versions.pop(_supported_versions.index(_default_version))
_supported_versions.sort()
_supported_versions.append(default)
if version_only:
return [v[6:] for v in _supported_versions]
else:
return _supported_versions
def default_version(version_only=False):
global _default_version
if not _default_version:
_default_version = os.readlink('/usr/bin/python3')
# consistency check
debian_default = read_default('default-version')
if not _default_version in (debian_default, os.path.join('/usr/bin', debian_default)):
raise ValueError("the symlink /usr/bin/python3 does not point to the "
"python3 default version. It must be reset "
"to point to %s" % debian_default)
_default_version = debian_default
if version_only:
return _default_version[6:]
else:
return _default_version
def requested_versions(vstring, version_only=False):
global _default_version
default_version()
versions = None
vinfo = parse_versions(vstring)
supported = supported_versions(version_only=True)
if len(vinfo) == 1:
versions = vinfo['versions'].intersection(supported)
vl = []
for version in versions: vl.append(version)
try:
default = vl.pop(vl.index(_default_version[6:]))
except:
default = ''
vl.sort()
if default:
vl.append(default)
else:
raise ValueError('No supported python3 versions in version string')
if not versions:
raise ValueError('empty set of versions')
if version_only:
return vl
else:
return ['python%s' % v for v in vl]
def installed_versions(version_only=False):
import glob
supported = supported_versions()
versions = [os.path.basename(s)
for s in glob.glob('/usr/bin/python3.[0-9]') + glob.glob('/usr/bin/python3.[0-9][0-9]')
if os.path.basename(s) in supported]
versions.sort()
if version_only:
return [v[6:] for v in versions]
else:
return versions
class ControlFileValueError(ValueError):
pass
class MissingVersionValueError(ValueError):
pass
def extract_pyversion_attribute(fn, pkg):
"""read the debian/control file, extract the X-Python3-Version
field."""
version = None
sversion = None
section = None
with open(fn, encoding='utf-8') as controlfile:
lines = [line.strip() for line in controlfile]
for line in lines:
if line == '' and section != None:
if pkg == 'Source':
break
section = None
elif line.startswith('Source:'):
section = 'Source'
elif line.startswith('Package: ' + pkg):
section = pkg
elif line.lower().startswith('x-python3-version:'):
if section != 'Source':
raise ValueError('attribute X-Python3-Version not in Source section')
sversion = line.split(':', 1)[1].strip()
if section is None:
raise ControlFileValueError('not a control file')
if pkg == 'Source':
if sversion is None:
raise MissingVersionValueError('no X-Python3-Version in control file')
return sversion
return version
'''
def requested_versions_bis(vstring, version_only=False):
versions = []
py_supported_short = supported_versions(version_only=True)
for item in vstring.split(','):
v=item.split('-')
if len(v)>1:
if not v[0]:
v[0] = py_supported_short[0]
if not v[1]:
v[1] = py_supported_short[-1]
for ver in py_supported_short:
try:
if version_cmp(ver,v[0]) >= 0 \
and version_cmp(ver,v[1]) <= 0:
versions.append(ver)
except ValueError:
pass
else:
if v[0] in py_supported_short:
versions.append(v[0])
versions.sort(version_cmp)
if not versions:
raise ValueError('empty set of versions')
if not version_only:
versions=['python'+i for i in versions]
return versions
'''
def main():
from optparse import OptionParser
usage = '[-v] [-h] [-d|--default] [-s|--supported] [-i|--installed] '
'[-r|--requested <version string>|<control file>]'
parser = OptionParser(usage=usage)
parser.add_option('-d', '--default',
help='print the default python3 version',
action='store_true', dest='default')
parser.add_option('-s', '--supported',
help='print the supported python3 versions',
action='store_true', dest='supported')
parser.add_option('-r', '--requested',
help='print the python3 versions requested by a build; '
'the argument is either the name of a control file '
'or the value of the X-Python3-Version attribute',
action='store_true', dest='requested')
parser.add_option('-i', '--installed',
help='print the installed supported python3 versions',
action='store_true', dest='installed')
parser.add_option('-v', '--version',
help='print just the version number(s)',
default=False, action='store_true', dest='version_only')
opts, args = parser.parse_args()
program = os.path.basename(sys.argv[0])
if opts.default and len(args) == 0:
try:
print(default_version(opts.version_only))
except ValueError as msg:
print("%s:" % program, msg)
sys.exit(1)
elif opts.supported and len(args) == 0:
print(' '.join(supported_versions(opts.version_only)))
elif opts.installed and len(args) == 0:
print(' '.join(installed_versions(opts.version_only)))
elif opts.requested and len(args) <= 1:
if len(args) == 0:
versions = 'debian/control'
else:
versions = args[0]
try:
if os.path.isfile(versions):
fn = versions
try:
vstring = extract_pyversion_attribute(fn, 'Source')
vs = requested_versions(vstring, opts.version_only)
except ControlFileValueError:
sys.stderr.write("%s: not a control file: %s, "
% (program, fn))
sys.exit(1)
except MissingVersionValueError:
sys.stderr.write("%s: no X-Python3-Version in control "
"file, using supported versions\n" %
program)
vs = supported_versions(opts.version_only)
else:
vs = requested_versions(versions, opts.version_only)
print(' '.join(vs))
except ValueError as msg:
sys.stderr.write("%s: %s\n" % (program, msg))
sys.exit(1)
else:
sys.stderr.write("usage: %s %s\n" % (program, usage))
sys.exit(1)
if __name__ == '__main__':
main()