/
usr
/
lib
/
python3
/
dist-packages
/
/usr/lib/python3/dist-packages
mkdir
upload
Name
Size
Mode
Actions
acme/
-
0755
rm
acme-1.1.0.egg-info/
-
0755
rm
apport/
-
0755
rm
apt/
-
0755
rm
aptsources/
-
0755
rm
apt_inst-stubs/
-
0755
rm
apt_pkg-stubs/
-
0755
rm
attr/
-
0755
rm
attrs-19.3.0.egg-info/
-
0755
rm
automat/
-
0755
rm
Automat-0.8.0.egg-info/
-
0755
rm
blinker/
-
0755
rm
certbot/
-
0755
rm
certbot-0.40.0.egg-info/
-
0755
rm
certbot_nginx/
-
0755
rm
certbot_nginx-0.40.0.egg-info/
-
0755
rm
certifi/
-
0755
rm
certifi-2019.11.28.egg-info/
-
0755
rm
chardet/
-
0755
rm
chardet-3.0.4.egg-info/
-
0755
rm
click/
-
0755
rm
Click-7.0.egg-info/
-
0755
rm
cloudinit/
-
0755
rm
cloud_init-23.1.2.egg-info/
-
0755
rm
colorama/
-
0755
rm
colorama-0.4.3.egg-info/
-
0755
rm
CommandNotFound/
-
0755
rm
ConfigArgParse-0.13.0.egg-info/
-
0755
rm
configobj-5.0.6.egg-info/
-
0755
rm
constantly/
-
0755
rm
constantly-15.1.0.egg-info/
-
0755
rm
cryptography/
-
0755
rm
cryptography-2.8.egg-info/
-
0755
rm
dbus/
-
0755
rm
dbus_python-1.2.16.egg-info/
-
0755
rm
debian/
-
0755
rm
debian_bundle/
-
0755
rm
distro-1.4.0.egg-info/
-
0755
rm
distro_info-0.23ubuntu1.egg-info/
-
0755
rm
DistUpgrade/
-
0755
rm
future/
-
0755
rm
future-0.18.2.egg-info/
-
0755
rm
gi/
-
0755
rm
hamcrest/
-
0755
rm
httplib2/
-
0755
rm
httplib2-0.14.0.egg-info/
-
0755
rm
HweSupportStatus/
-
0755
rm
hyperlink/
-
0755
rm
hyperlink-19.0.0.egg-info/
-
0755
rm
icu/
-
0755
rm
idna/
-
0755
rm
idna-2.8.egg-info/
-
0755
rm
importlib_metadata/
-
0755
rm
importlib_metadata-1.5.0.egg-info/
-
0755
rm
incremental/
-
0755
rm
incremental-16.10.1.egg-info/
-
0755
rm
janitor/
-
0755
rm
jinja2/
-
0755
rm
Jinja2-2.10.1.egg-info/
-
0755
rm
josepy/
-
0755
rm
josepy-1.2.0.egg-info/
-
0755
rm
jsonpatch-1.22.egg-info/
-
0755
rm
jsonpointer-2.0.egg-info/
-
0755
rm
jsonschema/
-
0755
rm
jsonschema-3.2.0.egg-info/
-
0755
rm
jwt/
-
0755
rm
keyring/
-
0755
rm
keyring-18.0.1.egg-info/
-
0755
rm
landscape/
-
0755
rm
LanguageSelector/
-
0755
rm
language_selector-0.1.egg-info/
-
0755
rm
launchpadlib/
-
0755
rm
launchpadlib-1.10.13.egg-info/
-
0755
rm
lazr/
-
0755
rm
lazr.restfulclient-0.14.2.egg-info/
-
0755
rm
lazr.uri-1.0.3.egg-info/
-
0755
rm
libfuturize/
-
0755
rm
libpasteurize/
-
0755
rm
markupsafe/
-
0755
rm
MarkupSafe-1.1.0.egg-info/
-
0755
rm
mock/
-
0755
rm
mock-3.0.5.egg-info/
-
0755
rm
more_itertools/
-
0755
rm
more_itertools-4.2.0.egg-info/
-
0755
rm
nacl/
-
0755
rm
netifaces-0.10.4.egg-info/
-
0755
rm
oauthlib/
-
0755
rm
oauthlib-3.1.0.egg-info/
-
0755
rm
OpenSSL/
-
0755
rm
parsedatetime/
-
0755
rm
parsedatetime-2.4.egg-info/
-
0755
rm
past/
-
0755
rm
pbr/
-
0755
rm
pbr-5.4.5.egg-info/
-
0755
rm
pexpect/
-
0755
rm
pkg_resources/
-
0755
rm
ptyprocess/
-
0755
rm
pyasn1/
-
0755
rm
pyasn1-0.4.2.egg-info/
-
0755
rm
pyasn1_modules/
-
0755
rm
PyGObject-3.36.0.egg-info/
-
0755
rm
pygtkcompat/
-
0755
rm
PyHamcrest-1.9.0.egg-info/
-
0755
rm
PyJWT-1.7.1.egg-info/
-
0755
rm
pymacaroons/
-
0755
rm
pymacaroons-0.13.0.egg-info/
-
0755
rm
PyNaCl-1.3.0.egg-info/
-
0755
rm
pyOpenSSL-19.0.0.egg-info/
-
0755
rm
pyparsing-2.4.6.egg-info/
-
0755
rm
pyrfc3339/
-
0755
rm
pyRFC3339-1.1.egg-info/
-
0755
rm
pyrsistent/
-
0755
rm
pyrsistent-0.15.5.egg-info/
-
0755
rm
pyserial-3.4.egg-info/
-
0755
rm
python_apt-2.0.0+ubuntu0.20.4.3.egg-info/
-
0755
rm
python_debian-0.1.36ubuntu1.egg-info/
-
0755
rm
pytz/
-
0755
rm
pytz-2019.3.egg-info/
-
0755
rm
requests/
-
0755
rm
requests-2.22.0.egg-info/
-
0755
rm
requests_toolbelt/
-
0755
rm
requests_toolbelt-0.8.0.egg-info/
-
0755
rm
requests_unixsocket/
-
0755
rm
requests_unixsocket-0.2.0.egg-info/
-
0755
rm
secretstorage/
-
0755
rm
SecretStorage-2.3.1.egg-info/
-
0755
rm
serial/
-
0755
rm
service_identity/
-
0755
rm
service_identity-18.1.0.egg-info/
-
0755
rm
setuptools/
-
0755
rm
setuptools-45.2.0.egg-info/
-
0755
rm
simplejson/
-
0755
rm
six-1.14.0.egg-info/
-
0755
rm
softwareproperties/
-
0755
rm
sos/
-
0755
rm
ssh_import_id/
-
0755
rm
ssh_import_id-5.10.egg-info/
-
0755
rm
systemd/
-
0755
rm
twisted/
-
0755
rm
Twisted-18.9.0.egg-info/
-
0755
rm
uaclient/
-
0755
rm
ubuntu_advantage_tools-20.3.egg-info/
-
0755
rm
ufw/
-
0755
rm
unattended_upgrades-0.1.egg-info/
-
0755
rm
UpdateManager/
-
0755
rm
urllib3/
-
0755
rm
urllib3-1.25.8.egg-info/
-
0755
rm
wadllib/
-
0755
rm
wadllib-1.3.3.egg-info/
-
0755
rm
yaml/
-
0755
rm
zipp-1.0.0.egg-info/
-
0755
rm
zope/
-
0755
rm
zope.component-4.3.0.egg-info/
-
0755
rm
zope.event-4.4.egg-info/
-
0755
rm
zope.hookable-5.0.0.egg-info/
-
0755
rm
zope.interface-4.7.1.egg-info/
-
0755
rm
__pycache__/
-
0755
rm
apport_python_hook.py
8063
0644
edit
dl
rm
apt_inst.cpython-38-x86_64-linux-gnu.so
60080
0644
edit
dl
rm
apt_pkg.cpython-38-x86_64-linux-gnu.so
359376
0644
edit
dl
rm
blinker-1.4.egg-info
3901
0644
edit
dl
rm
command_not_found-0.3.egg-info
189
0644
edit
dl
rm
configargparse.py
41446
0644
edit
dl
rm
configobj.py
89613
0644
edit
dl
rm
deb822.py
273
0644
edit
dl
rm
debconf.py
6769
0644
edit
dl
rm
distro.py
43251
0644
edit
dl
rm
distro_info.py
11155
0644
edit
dl
rm
easy_install.py
126
0644
edit
dl
rm
entrypoints.egg-info
226
0644
edit
dl
rm
entrypoints.py
8184
0644
edit
dl
rm
jsonpatch.py
25094
0644
edit
dl
rm
jsonpointer.py
9796
0644
edit
dl
rm
language_support_pkgs.py
9930
0644
edit
dl
rm
lsb_release.py
14901
0644
edit
dl
rm
netifaces.cpython-38-x86_64-linux-gnu.so
23224
0644
edit
dl
rm
netifaces.cpython-38d-x86_64-linux-gnu.so
27352
0644
edit
dl
rm
pexpect-4.6.0.egg-info
2285
0644
edit
dl
rm
problem_report.py
26867
0644
edit
dl
rm
pvectorc.cpython-38-x86_64-linux-gnu.so
37560
0644
edit
dl
rm
pyasn1_modules-0.2.1.egg-info
1722
0644
edit
dl
rm
PyICU-2.4.2.egg-info
10692
0644
edit
dl
rm
PyICU.py
1463
0644
edit
dl
rm
pyparsing.py
272400
0644
edit
dl
rm
PyYAML-5.3.1.egg-info
1781
0644
edit
dl
rm
simplejson-3.16.0.egg-info
3039
0644
edit
dl
rm
six.py
34074
0644
edit
dl
rm
snack.py
31134
0644
edit
dl
rm
sos-4.3.egg-info
295
0644
edit
dl
rm
systemd_python-234.egg-info
586
0644
edit
dl
rm
ufw-0.36.egg-info
261
0644
edit
dl
rm
validate.py
47243
0644
edit
dl
rm
zipp.py
6914
0644
edit
dl
rm
zope.component-4.3.0-nspkg.pth
529
0644
edit
dl
rm
zope.event-4.4-nspkg.pth
529
0644
edit
dl
rm
zope.hookable-5.0.0-nspkg.pth
529
0644
edit
dl
rm
zope.interface-4.7.1-nspkg.pth
529
0644
edit
dl
rm
_cffi_backend.cpython-38-x86_64-linux-gnu.so
186288
0644
edit
dl
rm
_dbus_bindings.cpython-38-x86_64-linux-gnu.so
172192
0644
edit
dl
rm
_dbus_glib_bindings.cpython-38-x86_64-linux-gnu.so
23080
0644
edit
dl
rm
_icu.cpython-38-x86_64-linux-gnu.so
1148408
0644
edit
dl
rm
_pyrsistent_version.py
23
0644
edit
dl
rm
_snack.cpython-38-x86_64-linux-gnu.so
43800
0644
edit
dl
rm
_version.py
21
0644
edit
dl
rm
_yaml.cpython-38-x86_64-linux-gnu.so
283376
0644
edit
dl
rm
Edit:
/usr/lib/python3/dist-packages/language_support_pkgs.py
(9930B)
#!/usr/bin/python3 import apt import os import subprocess DEFAULT_DEPENDS_FILE='/usr/share/language-selector/data/pkg_depends' class LanguageSupport: lang_country_map = None def __init__(self, apt_cache=None, depends_file=None): if apt_cache is None: self.apt_cache = apt.Cache() else: self.apt_cache = apt_cache self.pkg_depends = self._parse_pkg_depends(depends_file or DEFAULT_DEPENDS_FILE) def by_package_and_locale(self, package, locale, installed=False): '''Get language support packages for a package and locale. Note that this does not include support packages which are not specific to a particular trigger package, e. g. general language packs. To get those, call this with package==''. By default, only return packages which are not installed. If installed is True, return all packages instead. ''' packages = [] depmap = self.pkg_depends.get(package, {}) # check explicit entries for that locale for pkglist in depmap.get(self._langcode_from_locale(locale), {}).values(): for p in pkglist: if p in self.apt_cache: packages.append(p) # check patterns for empty locale string (i. e. applies to any locale) for pattern_list in depmap.get('', {}).values(): for pattern in pattern_list: for pkg_candidate in self._expand_pkg_pattern(pattern, locale): if pkg_candidate in self.apt_cache: packages.append(pkg_candidate) if not installed: # filter out installed packages packages = [p for p in packages if not self.apt_cache[p].installed] # exclude Fcitx packages if GNOME desktop desktop = os.environ.get('XDG_CURRENT_DESKTOP') if desktop and 'GNOME' in desktop.split(':'): for p in list(packages): if p.startswith('fcitx'): packages.remove(p) # exclude hunspell-de-XX since they conflict with -frami for country in ['de', 'at', 'ch']: if 'hunspell-de-' + country in packages: packages.remove('hunspell-de-' + country) return packages def by_locale(self, locale, installed=False): '''Get language support packages for a locale. Return all packages which need to be installed in order to provide language support for the given locale for all already installed packages. This should be called after adding a new locale to the system. By default, only return packages which are not installed. If installed is True, return all packages instead. ''' packages = [] for trigger in self.pkg_depends: try: if trigger == '' or self.apt_cache[trigger].installed: packages += self.by_package_and_locale(trigger, locale, installed) except KeyError: continue return packages def by_package(self, package, installed=False): '''Get language support packages for a package. This will install language support for that package for all available system languages. This is a wrapper around available_languages() and by_package_and_locale(). Note that this does not include support packages which are not specific to a particular trigger package, e. g. general language packs. To get those, call this with package==''. By default, only return packages which are not installed. If installed is True, return all packages instead. ''' packages = set() for lang in self.available_languages(): packages.update(self.by_package_and_locale(package, lang, installed)) return packages def missing(self, installed=False): '''Get language support packages for current system. Return all packages which need to be installed in order to provide language support all system locales for all already installed packages. This should be called after installing the system without language support packages (perhaps because there was no network available to download them). This is a wrapper around available_languages() and by_locale(). By default, only return packages which are not installed. If installed is True, return all packages instead. ''' packages = set() for lang in self.available_languages(): packages.update(self.by_locale(lang, installed)) return packages def available_languages(self): '''List available languages in the system. The list items can be passed as the "locale" argument of by_locale(), by_package_and_locale(), etc. ''' languages = set() lang_string = subprocess.check_output( ['/usr/share/language-tools/language-options'], universal_newlines=True) for lang in lang_string.split(): languages.add(lang) if not lang.startswith('zh_'): languages.add(lang.split('_')[0]) if os.path.isdir('/usr/share/locale-langpack/en') == False: languages.discard('en') return languages def _parse_pkg_depends(self, filename): '''Parse pkg_depends file. Return trigger_package -> langcode -> category -> [dependency,...] map. ''' map = {} with open(filename) as f: for line in f: line = line.strip() if not line or line.startswith('#'): continue (cat, lc, trigger, dep) = line.split(':') map.setdefault(trigger, {}).setdefault(lc, {}).setdefault(cat, []).append(dep) return map @classmethod def _langcode_from_locale(klass, locale): '''Turn a locale name into a language code as in pkg_depends.''' # special-case Chinese locales, as they are split between -hans and # -hant if locale.startswith('zh_CN') or locale.startswith('zh_SG'): return 'zh-hans' # Hong Kong and Taiwan use traditional if locale.startswith('zh_'): return 'zh-hant' return locale.split('_', 1)[0] @classmethod def _expand_pkg_pattern(klass, pattern, locale): '''Return all possible suffixes for given pattern and locale''' # people might call this with the pseudo-locales "zh-han[st]", support # these as well; we can only guess the country here. if locale == 'zh-hans': locale = 'zh_CN' elif locale == 'zh-hant': locale = 'zh_TW' locale = locale.split('.', 1)[0].lower() variant = None country = None try: (lang, country) = locale.split('_', 1) if '@' in country: (country, variant) = country.split('@', 1) except ValueError: lang = locale pkgs = [pattern, '%s%s' % (pattern, lang)] if country: pkgs.append('%s%s%s' % (pattern, lang, country)) pkgs.append('%s%s-%s' % (pattern, lang, country)) else: for country in klass._countries_for_lang(lang): pkgs.append('%s%s%s' % (pattern, lang, country)) pkgs.append('%s%s-%s' % (pattern, lang, country)) if variant: pkgs.append('%s%s-%s' % (pattern, lang, variant)) if country and variant: pkgs.append('%s%s-%s-%s' % (pattern, lang, country, variant)) # special-case Chinese if lang == 'zh': if country in ['cn', 'sg']: pkgs.append(pattern + 'zh-hans') else: pkgs.append(pattern + 'zh-hant') return pkgs @classmethod def _countries_for_lang(klass, lang): '''Return a list of countries for given language''' if klass.lang_country_map is None: klass.lang_country_map = {} # fill cache with open('/usr/share/i18n/SUPPORTED') as f: for line in f: line = line.split('#', 1)[0].split(' ')[0] if not line: continue line = line.split('.', 1)[0].split('@')[0] try: (l, c) = line.split('_') except ValueError: continue c = c.lower() klass.lang_country_map.setdefault(l, set()).add(c) return klass.lang_country_map.get(lang, []) def apt_cache_add_language_packs(resolver, cache, depends_file=None): '''Add language support for packages marked for installation. For all packages which are marked for installation in the given apt.Cache() object, mark the corresponding language packs and support packages for installation as well. This function can be used as an aptdaemon modify_cache_after plugin. ''' ls = LanguageSupport(cache, depends_file) support_pkgs = set() for pkg in cache.get_changes(): if pkg.marked_install: support_pkgs.update(ls.by_package(pkg.name)) for pkg in support_pkgs: cache[pkg].mark_install(from_user=False) def packagekit_what_provides_locale(cache, type, search, depends_file=None): '''PackageKit WhatProvides plugin for locale().''' if not search.startswith('locale('): raise NotImplementedError('cannot handle query type ' + search) locale = search.split('(', 1)[1][:-1] ls = LanguageSupport(cache, depends_file) pkgs = ls.by_locale(locale, installed=True) return [cache[p] for p in pkgs]
Save
cmd:
run