Linux business57.web-hosting.com 4.18.0-553.lve.el8.x86_64 #1 SMP Mon May 27 15:27:34 UTC 2024 x86_64
LiteSpeed
Server IP : 199.188.201.191 & Your IP : 3.135.209.242
Domains :
Cant Read [ /etc/named.conf ]
User : derozboy
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
opt /
alt /
python39 /
lib64 /
python3.9 /
Delete
Unzip
Name
Size
Permission
Date
Action
__pycache__
[ DIR ]
drwxr-xr-x
2025-01-21 09:33
asyncio
[ DIR ]
drwxr-xr-x
2025-01-21 09:33
collections
[ DIR ]
drwxr-xr-x
2025-01-21 09:33
concurrent
[ DIR ]
drwxr-xr-x
2025-01-21 09:33
config-3.9-x86_64-linux-gnu
[ DIR ]
drwxr-xr-x
2025-01-21 09:42
ctypes
[ DIR ]
drwxr-xr-x
2025-01-21 09:33
curses
[ DIR ]
drwxr-xr-x
2025-01-21 09:33
dbm
[ DIR ]
drwxr-xr-x
2025-01-21 09:33
distutils
[ DIR ]
drwxr-xr-x
2025-01-21 09:33
email
[ DIR ]
drwxr-xr-x
2025-01-21 09:33
encodings
[ DIR ]
drwxr-xr-x
2025-01-21 09:33
ensurepip
[ DIR ]
drwxr-xr-x
2025-01-21 09:33
html
[ DIR ]
drwxr-xr-x
2025-01-21 09:33
http
[ DIR ]
drwxr-xr-x
2025-01-21 09:33
importlib
[ DIR ]
drwxr-xr-x
2025-01-21 09:33
json
[ DIR ]
drwxr-xr-x
2025-01-21 09:33
lib-dynload
[ DIR ]
drwxr-xr-x
2025-01-21 09:33
lib2to3
[ DIR ]
drwxr-xr-x
2025-01-21 09:46
logging
[ DIR ]
drwxr-xr-x
2025-01-21 09:33
multiprocessing
[ DIR ]
drwxr-xr-x
2025-01-21 09:33
pydoc_data
[ DIR ]
drwxr-xr-x
2025-01-21 09:33
site-packages
[ DIR ]
drwxr-xr-x
2025-01-21 09:33
sqlite3
[ DIR ]
drwxr-xr-x
2025-01-21 09:33
unittest
[ DIR ]
drwxr-xr-x
2025-01-21 09:33
urllib
[ DIR ]
drwxr-xr-x
2025-01-21 09:33
venv
[ DIR ]
drwxr-xr-x
2025-01-21 09:33
wsgiref
[ DIR ]
drwxr-xr-x
2025-01-21 09:33
xml
[ DIR ]
drwxr-xr-x
2025-01-21 09:33
xmlrpc
[ DIR ]
drwxr-xr-x
2025-01-21 09:33
zoneinfo
[ DIR ]
drwxr-xr-x
2025-01-21 09:33
LICENSE.txt
13.61
KB
-rw-r--r--
2024-12-03 17:50
__future__.py
5.03
KB
-rw-r--r--
2024-12-03 17:50
__phello__.foo.py
64
B
-rw-r--r--
2024-12-03 17:50
_aix_support.py
3.31
KB
-rw-r--r--
2024-12-03 17:50
_bootlocale.py
1.76
KB
-rw-r--r--
2024-12-03 17:50
_bootsubprocess.py
2.61
KB
-rw-r--r--
2024-12-03 17:50
_collections_abc.py
28.69
KB
-rw-r--r--
2024-12-03 17:50
_compat_pickle.py
8.54
KB
-rw-r--r--
2024-12-03 17:50
_compression.py
5.21
KB
-rw-r--r--
2024-12-03 17:50
_markupbase.py
14.28
KB
-rw-r--r--
2024-12-03 17:50
_osx_support.py
21.26
KB
-rw-r--r--
2024-12-03 17:50
_py_abc.py
6.04
KB
-rw-r--r--
2024-12-03 17:50
_pydecimal.py
223.31
KB
-rw-r--r--
2024-12-03 17:50
_pyio.py
91.13
KB
-rw-r--r--
2024-12-03 17:50
_sitebuiltins.py
3.04
KB
-rw-r--r--
2024-12-03 17:50
_strptime.py
24.68
KB
-rw-r--r--
2024-12-03 17:50
_sysconfigdata__linux_x86_64-linux-gnu.py
39.59
KB
-rw-r--r--
2025-01-13 12:43
_sysconfigdata_d_linux_x86_64-linux-gnu.py
39.33
KB
-rw-r--r--
2025-01-13 12:32
_threading_local.py
7.05
KB
-rw-r--r--
2024-12-03 17:50
_weakrefset.py
5.78
KB
-rw-r--r--
2024-12-03 17:50
abc.py
4.8
KB
-rw-r--r--
2024-12-03 17:50
aifc.py
31.84
KB
-rw-r--r--
2024-12-03 17:50
antigravity.py
500
B
-rw-r--r--
2024-12-03 17:50
argparse.py
95.82
KB
-rw-r--r--
2024-12-03 17:50
ast.py
54.94
KB
-rw-r--r--
2024-12-03 17:50
asynchat.py
11.06
KB
-rw-r--r--
2024-12-03 17:50
asyncore.py
19.63
KB
-rw-r--r--
2024-12-03 17:50
base64.py
19.41
KB
-rwxr-xr-x
2024-12-03 17:50
bdb.py
30.65
KB
-rw-r--r--
2024-12-03 17:50
binhex.py
14.44
KB
-rw-r--r--
2024-12-03 17:50
bisect.py
2.29
KB
-rw-r--r--
2024-12-03 17:50
bz2.py
12.16
KB
-rw-r--r--
2024-12-03 17:50
cProfile.py
6.21
KB
-rwxr-xr-x
2024-12-03 17:50
calendar.py
24.25
KB
-rw-r--r--
2024-12-03 17:50
cgi.py
33.15
KB
-rwxr-xr-x
2024-12-03 17:50
cgitb.py
11.81
KB
-rw-r--r--
2024-12-03 17:50
chunk.py
5.31
KB
-rw-r--r--
2024-12-03 17:50
cmd.py
14.51
KB
-rw-r--r--
2024-12-03 17:50
code.py
10.37
KB
-rw-r--r--
2024-12-03 17:50
codecs.py
35.81
KB
-rw-r--r--
2024-12-03 17:50
codeop.py
6.18
KB
-rw-r--r--
2024-12-03 17:50
colorsys.py
3.97
KB
-rw-r--r--
2024-12-03 17:50
compileall.py
19.63
KB
-rw-r--r--
2024-12-03 17:50
configparser.py
53.3
KB
-rw-r--r--
2024-12-03 17:50
contextlib.py
24.05
KB
-rw-r--r--
2024-12-03 17:50
contextvars.py
129
B
-rw-r--r--
2024-12-03 17:50
copy.py
8.45
KB
-rw-r--r--
2024-12-03 17:50
copyreg.py
7.1
KB
-rw-r--r--
2024-12-03 17:50
crypt.py
3.73
KB
-rw-r--r--
2024-12-03 17:50
csv.py
15.77
KB
-rw-r--r--
2024-12-03 17:50
dataclasses.py
48.42
KB
-rw-r--r--
2024-12-03 17:50
datetime.py
87.09
KB
-rw-r--r--
2024-12-03 17:50
decimal.py
320
B
-rw-r--r--
2024-12-03 17:50
difflib.py
81.35
KB
-rw-r--r--
2024-12-03 17:50
dis.py
20.09
KB
-rw-r--r--
2024-12-03 17:50
doctest.py
102.12
KB
-rw-r--r--
2024-12-03 17:50
enum.py
38.52
KB
-rw-r--r--
2024-12-03 17:50
filecmp.py
9.79
KB
-rw-r--r--
2024-12-03 17:50
fileinput.py
14.44
KB
-rw-r--r--
2024-12-03 17:50
fnmatch.py
5.86
KB
-rw-r--r--
2024-12-03 17:50
formatter.py
14.79
KB
-rw-r--r--
2024-12-03 17:50
fractions.py
23.75
KB
-rw-r--r--
2024-12-03 17:50
ftplib.py
34.66
KB
-rw-r--r--
2024-12-03 17:50
functools.py
37.97
KB
-rw-r--r--
2024-12-03 17:50
genericpath.py
4.86
KB
-rw-r--r--
2024-12-03 17:50
getopt.py
7.31
KB
-rw-r--r--
2024-12-03 17:50
getpass.py
5.85
KB
-rw-r--r--
2024-12-03 17:50
gettext.py
26.63
KB
-rw-r--r--
2024-12-03 17:50
glob.py
5.69
KB
-rw-r--r--
2024-12-03 17:50
graphlib.py
9.35
KB
-rw-r--r--
2024-12-03 17:50
gzip.py
21.26
KB
-rw-r--r--
2024-12-03 17:50
hashlib.py
9.78
KB
-rw-r--r--
2024-12-03 17:50
heapq.py
22.34
KB
-rw-r--r--
2024-12-03 17:50
hmac.py
6.84
KB
-rw-r--r--
2024-12-03 17:50
imaplib.py
53.62
KB
-rw-r--r--
2024-12-03 17:50
imghdr.py
3.72
KB
-rw-r--r--
2024-12-03 17:50
imp.py
10.29
KB
-rw-r--r--
2024-12-03 17:50
inspect.py
115.46
KB
-rw-r--r--
2024-12-03 17:50
io.py
3.46
KB
-rw-r--r--
2024-12-03 17:50
ipaddress.py
76.79
KB
-rw-r--r--
2024-12-03 17:50
keyword.py
1.02
KB
-rw-r--r--
2024-12-03 17:50
linecache.py
5.33
KB
-rw-r--r--
2024-12-03 17:50
locale.py
76.44
KB
-rw-r--r--
2024-12-03 17:50
lzma.py
12.92
KB
-rw-r--r--
2024-12-03 17:50
mailbox.py
76.95
KB
-rw-r--r--
2024-12-03 17:50
mailcap.py
8.9
KB
-rw-r--r--
2024-12-03 17:50
mimetypes.py
21.06
KB
-rw-r--r--
2024-12-03 17:50
modulefinder.py
23.83
KB
-rw-r--r--
2024-12-03 17:50
netrc.py
5.44
KB
-rw-r--r--
2024-12-03 17:50
nntplib.py
40.06
KB
-rw-r--r--
2024-12-03 17:50
ntpath.py
27.08
KB
-rw-r--r--
2024-12-03 17:50
nturl2path.py
2.82
KB
-rw-r--r--
2024-12-03 17:50
numbers.py
10.1
KB
-rw-r--r--
2024-12-03 17:50
opcode.py
5.53
KB
-rw-r--r--
2024-12-03 17:50
operator.py
10.5
KB
-rw-r--r--
2024-12-03 17:50
optparse.py
58.95
KB
-rw-r--r--
2024-12-03 17:50
os.py
38.15
KB
-rw-r--r--
2024-12-03 17:50
pathlib.py
52.81
KB
-rw-r--r--
2024-12-03 17:50
pdb.py
61.77
KB
-rwxr-xr-x
2024-12-03 17:50
pickle.py
63.4
KB
-rw-r--r--
2024-12-03 17:50
pickletools.py
91.29
KB
-rw-r--r--
2024-12-03 17:50
pipes.py
8.71
KB
-rw-r--r--
2024-12-03 17:50
pkgutil.py
23.71
KB
-rw-r--r--
2024-12-03 17:50
platform.py
39.66
KB
-rwxr-xr-x
2024-12-03 17:50
plistlib.py
27.59
KB
-rw-r--r--
2024-12-03 17:50
poplib.py
14.84
KB
-rw-r--r--
2024-12-03 17:50
posixpath.py
15.35
KB
-rw-r--r--
2024-12-03 17:50
pprint.py
22
KB
-rw-r--r--
2024-12-03 17:50
profile.py
22.36
KB
-rwxr-xr-x
2024-12-03 17:50
pstats.py
28.64
KB
-rw-r--r--
2024-12-03 17:50
pty.py
4.69
KB
-rw-r--r--
2024-12-03 17:50
py_compile.py
8.01
KB
-rw-r--r--
2025-01-13 12:30
pyclbr.py
14.9
KB
-rw-r--r--
2024-12-03 17:50
pydoc.py
107.04
KB
-rwxr-xr-x
2024-12-03 17:50
queue.py
11.23
KB
-rw-r--r--
2024-12-03 17:50
quopri.py
7.11
KB
-rwxr-xr-x
2024-12-03 17:50
random.py
30.75
KB
-rw-r--r--
2024-12-03 17:50
re.py
15.49
KB
-rw-r--r--
2024-12-03 17:50
reprlib.py
5.14
KB
-rw-r--r--
2024-12-03 17:50
rlcompleter.py
7.47
KB
-rw-r--r--
2024-12-03 17:50
runpy.py
12.78
KB
-rw-r--r--
2024-12-03 17:50
sched.py
6.29
KB
-rw-r--r--
2024-12-03 17:50
secrets.py
1.99
KB
-rw-r--r--
2024-12-03 17:50
selectors.py
19.08
KB
-rw-r--r--
2024-12-03 17:50
shelve.py
8.33
KB
-rw-r--r--
2024-12-03 17:50
shlex.py
13.18
KB
-rw-r--r--
2024-12-03 17:50
shutil.py
51.79
KB
-rw-r--r--
2024-12-03 17:50
signal.py
2.38
KB
-rw-r--r--
2024-12-03 17:50
site.py
21.33
KB
-rw-r--r--
2024-12-03 17:50
smtpd.py
34.02
KB
-rwxr-xr-x
2024-12-03 17:50
smtplib.py
44.35
KB
-rwxr-xr-x
2024-12-03 17:50
sndhdr.py
6.93
KB
-rw-r--r--
2024-12-03 17:50
socket.py
36.05
KB
-rw-r--r--
2024-12-03 17:50
socketserver.py
26.66
KB
-rw-r--r--
2024-12-03 17:50
sre_compile.py
27.32
KB
-rw-r--r--
2024-12-03 17:50
sre_constants.py
7.01
KB
-rw-r--r--
2024-12-03 17:50
sre_parse.py
39.82
KB
-rw-r--r--
2024-12-03 17:50
ssl.py
51.3
KB
-rw-r--r--
2024-12-03 17:50
stat.py
5.36
KB
-rw-r--r--
2024-12-03 17:50
statistics.py
37.17
KB
-rw-r--r--
2024-12-03 17:50
string.py
10.32
KB
-rw-r--r--
2024-12-03 17:50
stringprep.py
12.61
KB
-rw-r--r--
2024-12-03 17:50
struct.py
257
B
-rw-r--r--
2024-12-03 17:50
subprocess.py
81.61
KB
-rw-r--r--
2024-12-03 17:50
sunau.py
17.73
KB
-rw-r--r--
2024-12-03 17:50
symbol.py
2.23
KB
-rw-r--r--
2025-01-13 12:33
symtable.py
7.72
KB
-rw-r--r--
2024-12-03 17:50
sysconfig.py
24.33
KB
-rw-r--r--
2024-12-03 17:50
tabnanny.py
11.15
KB
-rwxr-xr-x
2024-12-03 17:50
tarfile.py
104.39
KB
-rwxr-xr-x
2024-12-03 17:50
telnetlib.py
22.71
KB
-rw-r--r--
2024-12-03 17:50
tempfile.py
27.31
KB
-rw-r--r--
2024-12-03 17:50
textwrap.py
18.95
KB
-rw-r--r--
2024-12-03 17:50
this.py
1003
B
-rw-r--r--
2024-12-03 17:50
threading.py
52.91
KB
-rw-r--r--
2024-12-03 17:50
timeit.py
13.18
KB
-rwxr-xr-x
2024-12-03 17:50
token.py
2.31
KB
-rw-r--r--
2024-12-03 17:50
tokenize.py
25.28
KB
-rw-r--r--
2024-12-03 17:50
trace.py
28.54
KB
-rwxr-xr-x
2024-12-03 17:50
traceback.py
24.08
KB
-rw-r--r--
2024-12-03 17:50
tracemalloc.py
17.62
KB
-rw-r--r--
2024-12-03 17:50
tty.py
879
B
-rw-r--r--
2024-12-03 17:50
types.py
9.56
KB
-rw-r--r--
2024-12-03 17:50
typing.py
75.24
KB
-rw-r--r--
2024-12-03 17:50
uu.py
7.11
KB
-rw-r--r--
2025-01-13 12:44
uuid.py
26.68
KB
-rw-r--r--
2024-12-03 17:50
warnings.py
19.23
KB
-rw-r--r--
2024-12-03 17:50
wave.py
17.58
KB
-rw-r--r--
2024-12-03 17:50
weakref.py
21.05
KB
-rw-r--r--
2024-12-03 17:50
webbrowser.py
23.53
KB
-rwxr-xr-x
2024-12-03 17:50
xdrlib.py
5.77
KB
-rw-r--r--
2024-12-03 17:50
zipapp.py
7.36
KB
-rw-r--r--
2024-12-03 17:50
zipfile.py
86.17
KB
-rw-r--r--
2024-12-03 17:50
zipimport.py
30.04
KB
-rw-r--r--
2024-12-03 17:50
Save
Rename
"""Module/script to byte-compile all .py files to .pyc files. When called as a script with arguments, this compiles the directories given as arguments recursively; the -l option prevents it from recursing into directories. Without arguments, if compiles all modules on sys.path, without recursing into subdirectories. (Even though it should do so for packages -- for now, you'll have to deal with packages separately.) See module py_compile for details of the actual byte-compilation. """ import os import sys import importlib.util import py_compile import struct import filecmp from functools import partial from pathlib import Path __all__ = ["compile_dir","compile_file","compile_path"] def _walk_dir(dir, maxlevels, quiet=0): if quiet < 2 and isinstance(dir, os.PathLike): dir = os.fspath(dir) if not quiet: print('Listing {!r}...'.format(dir)) try: names = os.listdir(dir) except OSError: if quiet < 2: print("Can't list {!r}".format(dir)) names = [] names.sort() for name in names: if name == '__pycache__': continue fullname = os.path.join(dir, name) if not os.path.isdir(fullname): yield fullname elif (maxlevels > 0 and name != os.curdir and name != os.pardir and os.path.isdir(fullname) and not os.path.islink(fullname)): yield from _walk_dir(fullname, maxlevels=maxlevels - 1, quiet=quiet) def compile_dir(dir, maxlevels=None, ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=-1, workers=1, invalidation_mode=None, *, stripdir=None, prependdir=None, limit_sl_dest=None, hardlink_dupes=False): """Byte-compile all modules in the given directory tree. Arguments (only dir is required): dir: the directory to byte-compile maxlevels: maximum recursion level (default `sys.getrecursionlimit()`) ddir: the directory that will be prepended to the path to the file as it is compiled into each byte-code file. force: if True, force compilation, even if timestamps are up-to-date quiet: full output with False or 0, errors only with 1, no output with 2 legacy: if True, produce legacy pyc paths instead of PEP 3147 paths optimize: int or list of optimization levels or -1 for level of the interpreter. Multiple levels leads to multiple compiled files each with one optimization level. workers: maximum number of parallel workers invalidation_mode: how the up-to-dateness of the pyc will be checked stripdir: part of path to left-strip from source file path prependdir: path to prepend to beginning of original file path, applied after stripdir limit_sl_dest: ignore symlinks if they are pointing outside of the defined path hardlink_dupes: hardlink duplicated pyc files """ ProcessPoolExecutor = None if ddir is not None and (stripdir is not None or prependdir is not None): raise ValueError(("Destination dir (ddir) cannot be used " "in combination with stripdir or prependdir")) if ddir is not None: stripdir = dir prependdir = ddir ddir = None if workers < 0: raise ValueError('workers must be greater or equal to 0') if workers != 1: try: # Only import when needed, as low resource platforms may # fail to import it from concurrent.futures import ProcessPoolExecutor except ImportError: workers = 1 if maxlevels is None: maxlevels = sys.getrecursionlimit() files = _walk_dir(dir, quiet=quiet, maxlevels=maxlevels) success = True if workers != 1 and ProcessPoolExecutor is not None: # If workers == 0, let ProcessPoolExecutor choose workers = workers or None with ProcessPoolExecutor(max_workers=workers) as executor: results = executor.map(partial(compile_file, ddir=ddir, force=force, rx=rx, quiet=quiet, legacy=legacy, optimize=optimize, invalidation_mode=invalidation_mode, stripdir=stripdir, prependdir=prependdir, limit_sl_dest=limit_sl_dest, hardlink_dupes=hardlink_dupes), files) success = min(results, default=True) else: for file in files: if not compile_file(file, ddir, force, rx, quiet, legacy, optimize, invalidation_mode, stripdir=stripdir, prependdir=prependdir, limit_sl_dest=limit_sl_dest, hardlink_dupes=hardlink_dupes): success = False return success def compile_file(fullname, ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=-1, invalidation_mode=None, *, stripdir=None, prependdir=None, limit_sl_dest=None, hardlink_dupes=False): """Byte-compile one file. Arguments (only fullname is required): fullname: the file to byte-compile ddir: if given, the directory name compiled in to the byte-code file. force: if True, force compilation, even if timestamps are up-to-date quiet: full output with False or 0, errors only with 1, no output with 2 legacy: if True, produce legacy pyc paths instead of PEP 3147 paths optimize: int or list of optimization levels or -1 for level of the interpreter. Multiple levels leads to multiple compiled files each with one optimization level. invalidation_mode: how the up-to-dateness of the pyc will be checked stripdir: part of path to left-strip from source file path prependdir: path to prepend to beginning of original file path, applied after stripdir limit_sl_dest: ignore symlinks if they are pointing outside of the defined path. hardlink_dupes: hardlink duplicated pyc files """ if ddir is not None and (stripdir is not None or prependdir is not None): raise ValueError(("Destination dir (ddir) cannot be used " "in combination with stripdir or prependdir")) success = True if quiet < 2 and isinstance(fullname, os.PathLike): fullname = os.fspath(fullname) name = os.path.basename(fullname) dfile = None if ddir is not None: dfile = os.path.join(ddir, name) if stripdir is not None: fullname_parts = fullname.split(os.path.sep) stripdir_parts = stripdir.split(os.path.sep) ddir_parts = list(fullname_parts) for spart, opart in zip(stripdir_parts, fullname_parts): if spart == opart: ddir_parts.remove(spart) dfile = os.path.join(*ddir_parts) if prependdir is not None: if dfile is None: dfile = os.path.join(prependdir, fullname) else: dfile = os.path.join(prependdir, dfile) if isinstance(optimize, int): optimize = [optimize] # Use set() to remove duplicates. # Use sorted() to create pyc files in a deterministic order. optimize = sorted(set(optimize)) if hardlink_dupes and len(optimize) < 2: raise ValueError("Hardlinking of duplicated bytecode makes sense " "only for more than one optimization level") if rx is not None: mo = rx.search(fullname) if mo: return success if limit_sl_dest is not None and os.path.islink(fullname): if Path(limit_sl_dest).resolve() not in Path(fullname).resolve().parents: return success opt_cfiles = {} if os.path.isfile(fullname): for opt_level in optimize: if legacy: opt_cfiles[opt_level] = fullname + 'c' else: if opt_level >= 0: opt = opt_level if opt_level >= 1 else '' cfile = (importlib.util.cache_from_source( fullname, optimization=opt)) opt_cfiles[opt_level] = cfile else: cfile = importlib.util.cache_from_source(fullname) opt_cfiles[opt_level] = cfile head, tail = name[:-3], name[-3:] if tail == '.py': if not force: try: mtime = int(os.stat(fullname).st_mtime) expect = struct.pack('<4sLL', importlib.util.MAGIC_NUMBER, 0, mtime & 0xFFFF_FFFF) for cfile in opt_cfiles.values(): with open(cfile, 'rb') as chandle: actual = chandle.read(12) if expect != actual: break else: return success except OSError: pass if not quiet: print('Compiling {!r}...'.format(fullname)) try: for index, opt_level in enumerate(optimize): cfile = opt_cfiles[opt_level] ok = py_compile.compile(fullname, cfile, dfile, True, optimize=opt_level, invalidation_mode=invalidation_mode) if index > 0 and hardlink_dupes: previous_cfile = opt_cfiles[optimize[index - 1]] if filecmp.cmp(cfile, previous_cfile, shallow=False): os.unlink(cfile) os.link(previous_cfile, cfile) except py_compile.PyCompileError as err: success = False if quiet >= 2: return success elif quiet: print('*** Error compiling {!r}...'.format(fullname)) else: print('*** ', end='') # escape non-printable characters in msg encoding = sys.stdout.encoding or sys.getdefaultencoding() msg = err.msg.encode(encoding, errors='backslashreplace').decode(encoding) print(msg) except (SyntaxError, UnicodeError, OSError) as e: success = False if quiet >= 2: return success elif quiet: print('*** Error compiling {!r}...'.format(fullname)) else: print('*** ', end='') print(e.__class__.__name__ + ':', e) else: if ok == 0: success = False return success def compile_path(skip_curdir=1, maxlevels=0, force=False, quiet=0, legacy=False, optimize=-1, invalidation_mode=None): """Byte-compile all module on sys.path. Arguments (all optional): skip_curdir: if true, skip current directory (default True) maxlevels: max recursion level (default 0) force: as for compile_dir() (default False) quiet: as for compile_dir() (default 0) legacy: as for compile_dir() (default False) optimize: as for compile_dir() (default -1) invalidation_mode: as for compiler_dir() """ success = True for dir in sys.path: if (not dir or dir == os.curdir) and skip_curdir: if quiet < 2: print('Skipping current directory') else: success = success and compile_dir( dir, maxlevels, None, force, quiet=quiet, legacy=legacy, optimize=optimize, invalidation_mode=invalidation_mode, ) return success def main(): """Script main program.""" import argparse parser = argparse.ArgumentParser( description='Utilities to support installing Python libraries.') parser.add_argument('-l', action='store_const', const=0, default=None, dest='maxlevels', help="don't recurse into subdirectories") parser.add_argument('-r', type=int, dest='recursion', help=('control the maximum recursion level. ' 'if `-l` and `-r` options are specified, ' 'then `-r` takes precedence.')) parser.add_argument('-f', action='store_true', dest='force', help='force rebuild even if timestamps are up to date') parser.add_argument('-q', action='count', dest='quiet', default=0, help='output only error messages; -qq will suppress ' 'the error messages as well.') parser.add_argument('-b', action='store_true', dest='legacy', help='use legacy (pre-PEP3147) compiled file locations') parser.add_argument('-d', metavar='DESTDIR', dest='ddir', default=None, help=('directory to prepend to file paths for use in ' 'compile-time tracebacks and in runtime ' 'tracebacks in cases where the source file is ' 'unavailable')) parser.add_argument('-s', metavar='STRIPDIR', dest='stripdir', default=None, help=('part of path to left-strip from path ' 'to source file - for example buildroot. ' '`-d` and `-s` options cannot be ' 'specified together.')) parser.add_argument('-p', metavar='PREPENDDIR', dest='prependdir', default=None, help=('path to add as prefix to path ' 'to source file - for example / to make ' 'it absolute when some part is removed ' 'by `-s` option. ' '`-d` and `-p` options cannot be ' 'specified together.')) parser.add_argument('-x', metavar='REGEXP', dest='rx', default=None, help=('skip files matching the regular expression; ' 'the regexp is searched for in the full path ' 'of each file considered for compilation')) parser.add_argument('-i', metavar='FILE', dest='flist', help=('add all the files and directories listed in ' 'FILE to the list considered for compilation; ' 'if "-", names are read from stdin')) parser.add_argument('compile_dest', metavar='FILE|DIR', nargs='*', help=('zero or more file and directory names ' 'to compile; if no arguments given, defaults ' 'to the equivalent of -l sys.path')) parser.add_argument('-j', '--workers', default=1, type=int, help='Run compileall concurrently') invalidation_modes = [mode.name.lower().replace('_', '-') for mode in py_compile.PycInvalidationMode] parser.add_argument('--invalidation-mode', choices=sorted(invalidation_modes), help=('set .pyc invalidation mode; defaults to ' '"checked-hash" if the SOURCE_DATE_EPOCH ' 'environment variable is set, and ' '"timestamp" otherwise.')) parser.add_argument('-o', action='append', type=int, dest='opt_levels', help=('Optimization levels to run compilation with. ' 'Default is -1 which uses the optimization level ' 'of the Python interpreter itself (see -O).')) parser.add_argument('-e', metavar='DIR', dest='limit_sl_dest', help='Ignore symlinks pointing outsite of the DIR') parser.add_argument('--hardlink-dupes', action='store_true', dest='hardlink_dupes', help='Hardlink duplicated pyc files') args = parser.parse_args() compile_dests = args.compile_dest if args.rx: import re args.rx = re.compile(args.rx) if args.limit_sl_dest == "": args.limit_sl_dest = None if args.recursion is not None: maxlevels = args.recursion else: maxlevels = args.maxlevels if args.opt_levels is None: args.opt_levels = [-1] if len(args.opt_levels) == 1 and args.hardlink_dupes: parser.error(("Hardlinking of duplicated bytecode makes sense " "only for more than one optimization level.")) if args.ddir is not None and ( args.stripdir is not None or args.prependdir is not None ): parser.error("-d cannot be used in combination with -s or -p") # if flist is provided then load it if args.flist: try: with (sys.stdin if args.flist=='-' else open(args.flist)) as f: for line in f: compile_dests.append(line.strip()) except OSError: if args.quiet < 2: print("Error reading file list {}".format(args.flist)) return False if args.invalidation_mode: ivl_mode = args.invalidation_mode.replace('-', '_').upper() invalidation_mode = py_compile.PycInvalidationMode[ivl_mode] else: invalidation_mode = None success = True try: if compile_dests: for dest in compile_dests: if os.path.isfile(dest): if not compile_file(dest, args.ddir, args.force, args.rx, args.quiet, args.legacy, invalidation_mode=invalidation_mode, stripdir=args.stripdir, prependdir=args.prependdir, optimize=args.opt_levels, limit_sl_dest=args.limit_sl_dest, hardlink_dupes=args.hardlink_dupes): success = False else: if not compile_dir(dest, maxlevels, args.ddir, args.force, args.rx, args.quiet, args.legacy, workers=args.workers, invalidation_mode=invalidation_mode, stripdir=args.stripdir, prependdir=args.prependdir, optimize=args.opt_levels, limit_sl_dest=args.limit_sl_dest, hardlink_dupes=args.hardlink_dupes): success = False return success else: return compile_path(legacy=args.legacy, force=args.force, quiet=args.quiet, invalidation_mode=invalidation_mode) except KeyboardInterrupt: if args.quiet < 2: print("\n[interrupted]") return False return True if __name__ == '__main__': exit_status = int(not main()) sys.exit(exit_status)