File manager - Edit - /var/www/payraty/helpdesk/public/storage/branding_media/images/python3.tar
Back
debian_config 0000644 00000000136 00000000000 0007177 0 ustar 00 [DEFAULT] # how to byte-compile (comma separated: standard, optimize) byte-compile = standard runtime.d/public_modules.rtinstall 0000755 00000000332 00000000000 0013357 0 ustar 00 #! /bin/sh set -e VERSION=${2#python} if which py3compile >/dev/null 2>&1; then py3compile -V $VERSION /usr/lib/python3/dist-packages else echo >&2 "py3compile not found in $(basename $0) hook." exit 1 fi runtime.d/public_modules.rtremove 0000755 00000001213 00000000000 0013205 0 ustar 00 #! /bin/sh set -e VERSION=${2#python} if which py3clean >/dev/null 2>&1; then if [ "$VERSION" = 3.1 ]; then find /usr/lib/python3.1/dist-packages -name '*.py[co]' -delete find /usr/lib/python3/dist-packages -name '*.py[co]' -delete else py3clean -V $VERSION /usr/lib/python3/dist-packages fi else if [ "$VERSION" = 3.1 ]; then find /usr/lib/python3.1/dist-packages -name '*.py[co]' -delete else TAG=`python$VERSION -c "import imp; print(imp.magic_tags[imp.get_magic()])"` \ find /usr/lib/python3/dist-packages -name "*.$TAG.py[co]" -delete find /usr/lib/python3/dist-packages -depth -empty -name '__pycache__' -delete fi fi runtime.d/byobu.rtupdate 0000755 00000000171 00000000000 0011306 0 ustar 00 #! /bin/sh set -e if [ "$1" = rtupdate ]; then py3clean -p byobu /usr/lib/byobu py3compile -p byobu /usr/lib/byobu fi python.mk 0000644 00000004156 00000000000 0006365 0 ustar 00 # some macros useful for packaging python packages # to include it unconditionally: # include /usr/share/python3/python.mk # # to include it conditionally, and have the packaging working with earlier releases # and backports: # -include /usr/share/python/python.mk # ifeq (,$(py_sitename)) # py_sitename = site-packages # py_libdir = /usr/lib/python$(subst python,,$(1))/site-packages # py_sitename_sh = $(py_sitename) # py_libdir_sh = $(py_libdir) # endif # py_sitename: name of the site-packages/dist-packages directory depending # on the python version. Call as: $(call py_sitename, <python version>). # Don't use this in shell snippets inside loops. py_sitename = $(if $(filter $(subst python,,$(1)), 2.3 2.4 2.5),site,dist)-packages # py_libdir: absolute path to the default python library for third party # stuff. Call as: $(call py_libdir, <python version>). # Don't use this in shell snippets inside loops. py_libdir = /usr/lib/python$(strip $(if $(findstring 3.,$(subst python,,$(1))),3,$(subst python,,$(1))))/$(py_sitename) # py_pkgname: package name corresponding to the python version. # Call as: $(call py_pkgname, <path>, <python version>). py_pkgname = $(if $(findstring 3.,$(2)),$(subst python-,python3-,$(1)),$(1)) # distutils' build directory py_builddir = $(shell python$(strip $(subst python,,$(1))) -c 'from distutils.command.build import build; from distutils.core import Distribution; b = build(Distribution()); b.finalize_options(); print(b.build_platlib)') # The same macros for use inside loops in shell snippets py_sitename_sh = $$(basename $$(_py_=$(strip $(1)); python$${_py_\#python*} -c 'from distutils import sysconfig; print(sysconfig.get_python_lib())')) py_libdir_sh = $$(_py_=$(strip $(1)); python$${_py_\#python*} -c 'from distutils import sysconfig; print(sysconfig.get_python_lib())') py_builddir_sh = $$(_py_=$(strip $(1)); python$${_py_\#python*} -c 'from distutils.command.build import build; from distutils.core import Distribution; b = build(Distribution()); b.finalize_options(); print(b.build_platlib)') # Arguments to pass to setup.py install py_setup_install_args = --install-layout=deb debian_defaults 0000644 00000000712 00000000000 0007541 0 ustar 00 [DEFAULT] # the default python3 version default-version = python3.10 # all supported python3 versions supported-versions = python3.10 # formerly supported python3 versions old-versions = python3.1, python3.2, python3.3, python3.4, python3.5, python3.6, python3.7, python3.8, python3.9 # unsupported versions, including older versions unsupported-versions = python3.1, python3.2, python3.3, python3.4, python3.5, python3.6, python3.7, python3.8, python3.9 bcep/python3-jinja2 0000644 00000000113 00000000000 0010113 0 ustar 00 re|-3.6|/usr/lib/python3/dist-packages/jinja2|.*/async(support|filters).py debpython/files.py 0000644 00000006316 00000000000 0010163 0 ustar 00 # Copyright © 2012 Piotr Ożarowski <piotr@debian.org> # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. import logging from os import walk from os.path import abspath, isfile, join from subprocess import Popen, PIPE from debpython import PUBLIC_DIR_RE log = logging.getLogger(__name__) def from_directory(dname, extensions=('.py',)): """Generate *.py file names available in given directory.""" extensions = tuple(extensions) # .endswith doesn't like list if isinstance(dname, (list, tuple)): for item in dname: for fn in from_directory(item): yield fn elif isfile(dname) and dname.endswith(extensions): yield dname else: for root, dirs, file_names in walk(abspath(dname)): for fn in file_names: if fn.endswith(extensions): yield join(root, fn) def from_package(package_name, extensions=('.py',)): """Generate *.py file names available in given package.""" extensions = tuple(extensions) # .endswith doesn't like list process = Popen("/usr/bin/dpkg -L %s" % package_name, shell=True, stdout=PIPE) stdout, stderr = process.communicate() if process.returncode != 0: raise Exception("cannot get content of %s" % package_name) stdout = str(stdout, 'utf-8') for line in stdout.splitlines(): if line.endswith(extensions): yield line def filter_directory(files, dname): """Generate *.py file names that match given directory.""" for fn in files: if fn.startswith(dname): yield fn def filter_public(files, versions): """Generate *.py file names that match given versions.""" vstr = set("%d.%d" % i for i in versions) shared_vstr = set(str(i[0]) for i in versions) for fn in files: public_dir = PUBLIC_DIR_RE.match(fn) if public_dir: vers = public_dir.group(1) if vers in shared_vstr or vers in vstr: yield fn def filter_out_ext(files, extensions): """Removes files with matching extensions from given generator.""" extensions = tuple(extensions) # .endswith doesn't like list for fn in files: if not fn.endswith(extensions): yield fn debpython/interpreter.py 0000644 00000032307 00000000000 0011423 0 ustar 00 # Copyright © 2012 Piotr Ożarowski <piotr@debian.org> # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. import logging import os import re from os.path import join, split from debpython import execute from debpython.version import Version SHEBANG_RE = re.compile(r''' (?:\#!\s*){0,1} # shebang prefix (?P<path> .*?/bin/.*?)? (?P<name> python|pypy) (?P<version> \d[\.\d]*)? (?P<debug> -dbg)? (?P<options>.*) ''', re.VERBOSE) EXTFILE_RE = re.compile(r''' (?P<name>.*?) (?:\. (?P<stableabi>abi\d+) |(?:\. (?P<soabi> (?P<impl>cpython|pypy) - (?P<ver>\d{2}) (?P<flags>[a-z]*?) ) (?: -(?P<multiarch>[^/]*?) )? ))? (?P<debug>_d)? \.so$''', re.VERBOSE) log = logging.getLogger(__name__) class Interpreter: path = None name = 'python' version = None debug = False impl = 'cpython' # implementation options = () _cache = {} def __init__(self, value=None, path=None, name=None, version=None, debug=None, impl=None, options=None): params = locals() del params['self'] del params['value'] if isinstance(value, Interpreter): for key in params.keys(): if params[key] is None: params[key] = getattr(value, key) elif value: if value.replace('.', '').isdigit() and not version: params['version'] = Version(value) else: for key, val in self.parse(value).items(): if params[key] is None: params[key] = val for key, val in params.items(): setattr(self, key, val) def __setattr__(self, name, value): if name == 'name' and value: if value.startswith('python'): self.__dict__['impl'] = 'cpython' elif value.startswith('pypy'): self.__dict__['impl'] = 'pypy' if '-dbg' in value: self.__dict__['debug'] = True elif name == 'version' and value is not None: value = Version(value) if name in ('name', 'impl', 'debug', 'options') and value is None: # get the class default instead self.__dict__[name] = getattr(Interpreter, name) else: self.__dict__[name] = value def __repr__(self): result = self.path or '' result += self._vstr(self.version) if self.options: result += ' ' + ' '.join(self.options) return result def __str__(self): return self._vstr(self.version) def _vstr(self, version): if self.impl == 'pypy': # TODO: will Debian support more than one PyPy version? return self.name if version and str(version) not in self.name: if self.debug: return 'python{}-dbg'.format(version) return self.name + str(version) return self.name @staticmethod def parse(shebang): """Return dict with parsed shebang >>> sorted(Interpreter.parse('pypy').items()) [('debug', None), ('name', 'pypy'), ('options', ()), ('path', None), ('version', None)] >>> sorted(Interpreter.parse('/usr/bin/python3.3-dbg').items()) [('debug', '-dbg'), ('name', 'python'), ('options', ()), ('path', '/usr/bin/'), ('version', '3.3')] >>> sorted(Interpreter.parse('#! /usr/bin/pypy --foo').items()) [('debug', None), ('name', 'pypy'), ('options', ('--foo',)), ('path', '/usr/bin/'), ('version', None)] >>> sorted(Interpreter.parse('#! /usr/bin/python3.2').items()) [('debug', None), ('name', 'python'), ('options', ()), ('path', '/usr/bin/'), ('version', '3.2')] >>> sorted(Interpreter.parse('/usr/bin/python3.2-dbg --foo --bar').items()) [('debug', '-dbg'), ('name', 'python'), ('options', ('--foo', '--bar')),\ ('path', '/usr/bin/'), ('version', '3.2')] """ result = SHEBANG_RE.search(shebang) if not result: return {} result = result.groupdict() if 'options' in result: # TODO: do we need "--key value" here? result['options'] = tuple(result['options'].split()) return result def sitedir(self, gdb=False, package=None, version=None): """Return path to site-packages directory. Note that returned path is not the final location of .py files >>> i = Interpreter('python') >>> i.sitedir(version='3.1') '/usr/lib/python3/dist-packages/' >>> i.sitedir(version='2.5') '/usr/lib/python2.5/site-packages/' >>> i.sitedir(version=Version('2.7')) '/usr/lib/python2.7/dist-packages/' >>> i.sitedir(version='3.1', gdb=True, package='python3-foo') 'debian/python3-foo/usr/lib/debug/usr/lib/python3/dist-packages/' >>> i.sitedir(version=Version('3.2')) '/usr/lib/python3/dist-packages/' >>> Interpreter('pypy').sitedir(version='2.0') '/usr/lib/pypy/dist-packages/' """ version = Version(version or self.version) #if not version: # version = Version(DEFAULT) if self.impl == 'pypy': path = '/usr/lib/pypy/dist-packages/' elif version << Version('2.6'): path = "/usr/lib/python%s/site-packages/" % version elif version << Version('3.0'): path = "/usr/lib/python%s/dist-packages/" % version else: path = '/usr/lib/python3/dist-packages/' if gdb: path = "/usr/lib/debug%s" % path if package: path = "debian/%s%s" % (package, path) return path def cache_file(self, fpath, version=None): """Given path to a .py file, return path to its .pyc/.pyo file. This function is inspired by Python 3.2's imp.cache_from_source. :param fpath: path to file name :param version: Python version >>> i = Interpreter('python') >>> i.cache_file('foo.py', Version('3.1')) 'foo.pyc' >>> i.cache_file('bar/foo.py', '3.2') 'bar/__pycache__/foo.cpython-32.pyc' """ version = Version(version or self.version) last_char = 'o' if '-O' in self.options else 'c' if version <= Version('3.1'): return fpath + last_char fdir, fname = split(fpath) if not fname.endswith('.py'): fname += '.py' return join(fdir, '__pycache__', "%s.%s.py%s" % (fname[:-3], self.magic_tag(version), last_char)) def ext_file(self, name, version=None): """Return extension name with soname and multiarch tags.""" version = Version(version or self.version) soabi, multiarch = self._get_config(version) result = name.split('.', 1)[0] if soabi: result += '.{}'.format(soabi) if multiarch: result += '-{}'.format(multiarch) if self.debug and self.impl == 'cpython'\ and version << Version('3'): result += '_d' return '{}.so'.format(result) def magic_number(self, version=None): """Return magic number.""" version = Version(version or self.version) if self.impl == 'cpython' and version << Version('3'): return '' result = self._execute('import imp; print(imp.get_magic())', version) return eval(result) def magic_tag(self, version=None): """Return Python magic tag (used in __pycache__ dir to tag files). >>> i = Interpreter('python') >>> i.magic_tag(version='3.2') 'cpython-32' """ version = Version(version or self.version) if self.impl == 'cpython' and version << Version('3.2'): return '' return self._execute('import imp; print(imp.get_tag())', version) def multiarch(self, version=None): """Return multiarch tag.""" version = Version(version or self.version) try: soabi, multiarch = self._get_config(version) except Exception: log.debug('cannot get multiarch', exc_info=True) # interpreter without multiach support return '' return multiarch def stableabi(self, version=None): version = Version(version or self.version) # stable ABI was introduced in Python 3.3 if self.impl == 'cpython' and version >> Version('3.2'): return 'abi{}'.format(version.major) def soabi(self, version=None): """Return SOABI flag (used to in .so files). >>> i = Interpreter('python') >>> i.soabi(version=Version('3.3')) 'cpython-33m' """ version = Version(version or self.version) # NOTE: it's not the same as magic_tag try: soabi, multiarch = self._get_config(version) except Exception: log.debug('cannot get soabi', exc_info=True) # interpreter without soabi support return '' return soabi def check_extname(self, fname, version=None): """Return extension file name if file can be renamed. >>> i = Interpreter('python') >>> i.check_extname('foo.so', version='3.3') # doctest: +ELLIPSIS 'foo.cpython-33m-....so' >>> i.check_extname('foo.abi3.so', version='3.3') >>> i.check_extname('foo/bar/bazmodule.so', version='3.3') # doctest: +ELLIPSIS 'foo/bar/baz.cpython-33m-....so' """ version = Version(version or self.version) if '/' in fname: fdir, fname = fname.rsplit('/', 1) # in case full path was passed else: fdir = '' info = EXTFILE_RE.search(fname) if not info: return info = info.groupdict() if info['stableabi']: # files with stable ABI in name don't need changes return i = Interpreter(self, version=version) if info['ver']: i.version = "{}.{}".format(info['ver'][0], info['ver'][1]) if not i.debug and (info['debug'] or 'd' in (info['flags'] or '')): i.debug = True try: soabi, multiarch = i._get_config() except Exception: log.debug('cannot get soabi/multiarch', exc_info=True) return result = info['name'] if i.impl == 'cpython' and i.version >> '3.2' and result.endswith('module'): result = result[:-6] if info['soabi'] or soabi: result = "{}.{}".format(result, info['soabi'] or soabi) if info['multiarch'] or multiarch: result = "{}-{}".format(result, info['multiarch'] or multiarch) result += '.so' if fname == result: return return join(fdir, result) def _get_config(self, version=None): version = Version(version or self.version) # sysconfig module is available since Python 3.2 # (also backported to Python 2.7) if self.impl == 'pypy' or self.impl == 'cpython' and ( version >> '2.6' and version << '3' or version >> '3.1' or version == '3'): cmd = 'import sysconfig as s;' else: cmd = 'from distutils import sysconfig as s;' cmd += 'print("__SEP__".join(i or "" ' \ 'for i in s.get_config_vars("SOABI", "MULTIARCH")))' conf_vars = self._execute(cmd, version).split('__SEP__') try: conf_vars[1] = os.environ['DEB_HOST_MULTIARCH'] except KeyError: pass return conf_vars def _execute(self, command, version=None, cache=True): version = Version(version or self.version) command = "{} -c '{}'".format(self._vstr(version), command.replace("'", "\'")) if cache and command in self.__class__._cache: return self.__class__._cache[command] output = execute(command) if output['returncode'] != 0: log.debug(output['stderr']) raise Exception('{} failed with status code {}'.format(command, output['returncode'])) result = output['stdout'].splitlines() if len(result) == 1: result = result[0] if cache: self.__class__._cache[command] = result return result debpython/__init__.py 0000644 00000003525 00000000000 0010617 0 ustar 00 try: from datetime import datetime except ImportError: datetime = None import logging import re from subprocess import PIPE, Popen from pickle import dumps log = logging.getLogger(__name__) PUBLIC_DIR_RE = re.compile(r'.*?/usr/lib/python(\d(?:.\d+)?)/(site|dist)-packages') class memoize: def __init__(self, func): self.func = func self.cache = {} def __call__(self, *args, **kwargs): key = dumps((args, kwargs)) if key not in self.cache: self.cache[key] = self.func(*args, **kwargs) return self.cache[key] def execute(command, cwd=None, env=None, log_output=None): """Execute external shell commad. :param cdw: currennt working directory :param env: environment :param log_output: * opened log file or path to this file, or * None if output should be included in the returned dict, or * False if output should be redirectored to stdout/stderr """ args = {'shell': True, 'cwd': cwd, 'env': env} close = False if log_output is False: pass elif log_output is None: args.update(stdout=PIPE, stderr=PIPE) elif log_output: if isinstance(log_output, str): close = True log_output = open(log_output, 'a') if datetime: log_output.write('\n# command executed on {}'.format(datetime.now().isoformat())) log_output.write('\n$ {}\n'.format(command)) log_output.flush() args.update(stdout=log_output, stderr=log_output) log.debug('invoking: %s', command) with Popen(command, **args) as process: stdout, stderr = process.communicate() close and log_output.close() return dict(returncode=process.returncode, stdout=stdout and str(stdout, 'utf-8'), stderr=stderr and str(stderr, 'utf-8')) debpython/__pycache__/files.cpython-310.pyc 0000644 00000004560 00000000000 0014521 0 ustar 00 o ��b� � @ s~ d dl Z d dlmZ d dlmZmZmZ d dlmZm Z d dl mZ e �e �Zddd�Zdd d �Zdd� Zd d� Zdd� ZdS )� N)�walk)�abspath�isfile�join)�Popen�PIPE)� PUBLIC_DIR_RE�z.pyc c s� � t |�}t| tt f�r| D ]}t|�D ]}|V qqdS t| �r+| �|�r+| V dS tt| ��D ]\}}}|D ] }|�|�rEt||�V q8q1dS )z6Generate *.py file names available in given directory.N) �tuple� isinstance�list�from_directoryr �endswithr r r )�dname� extensions�item�fn�root�dirs� file_names� r �%/usr/share/python3/debpython/files.pyr s"