168 lines
4.2 KiB
Python
168 lines
4.2 KiB
Python
# GPLv3 or later.
|
|
# (C) J.Y.Amihud 2025
|
|
|
|
# Program that troubleshoots execution of python scrips.
|
|
try:
|
|
import importlib.util
|
|
except:
|
|
NotFoundError("importlib.util")
|
|
exit()
|
|
|
|
try:
|
|
import os
|
|
except:
|
|
NotFoundError("os")
|
|
exit()
|
|
|
|
import __main__
|
|
|
|
count = 0
|
|
broken = 0
|
|
|
|
checked = []
|
|
|
|
def run():
|
|
|
|
global count
|
|
global broken
|
|
|
|
mainfilename = __main__.__file__
|
|
check(mainfilename)
|
|
|
|
if broken:
|
|
print()
|
|
print(" "+str(broken)+" missing modules found.")
|
|
print(" It is "+str(int(round(broken/count*100)))+"% of the program broken.")
|
|
print(" Running may introduce issues.")
|
|
print()
|
|
print(" You can try to run:")
|
|
print(" $ python3 -m pip install {module}")
|
|
print(" To install missing modules.")
|
|
print()
|
|
|
|
yn = input(clr["tdyl"]+"[ ? ]"+clr["norm"]+" Try to run anyway? ( Y/n ): ")
|
|
if "y" not in yn.lower():
|
|
exit()
|
|
|
|
def check(filename):
|
|
|
|
global count
|
|
global broken
|
|
global checked
|
|
|
|
checked.append(filename)
|
|
checkalso = []
|
|
|
|
text = open(filename, "r")
|
|
text = text.read()
|
|
|
|
if __file__ in filename:
|
|
return
|
|
|
|
for line in text.split("\n"):
|
|
if "import" in line and __name__ not in line:
|
|
|
|
if line.strip().startswith("from"):
|
|
line = line.strip()[5:]
|
|
line = line.replace(" import ", ".").strip()
|
|
|
|
if line.endswith("*"):
|
|
line = line[:-2]
|
|
|
|
elif line.strip().startswith("import"):
|
|
line = line.replace("import", "").strip()
|
|
|
|
else:
|
|
continue
|
|
|
|
if "," in line:
|
|
line = line[:line.find(",")].strip()
|
|
|
|
count += 1
|
|
|
|
try:
|
|
spec = importlib.util.find_spec(line)
|
|
except:
|
|
|
|
try:
|
|
line = line[:line.rfind(".")]
|
|
spec = importlib.util.find_spec(line)
|
|
except:
|
|
|
|
print(clr["tdyl"]+"[ ? ]"+clr["norm"], line)
|
|
continue
|
|
|
|
|
|
if spec:
|
|
#Found(spec)
|
|
|
|
if os.getcwd() in str(spec.origin):
|
|
checkalso.append(spec.origin)
|
|
|
|
|
|
else:
|
|
NotFoundError(line, filename)
|
|
broken += 1
|
|
|
|
if checkalso:
|
|
for f in checkalso:
|
|
if f not in checked:
|
|
try:
|
|
check(f)
|
|
except:
|
|
pass
|
|
|
|
def Found(spec):
|
|
|
|
print(clr["tdgr"]+"[ v ]"+clr["norm"], spec.name)
|
|
|
|
def NotFoundError(module, filename=""):
|
|
|
|
print(clr["tdrd"]+"[ x ]"+clr["norm"], module, clr["tbbl"]+"in "+filename+clr["norm"])
|
|
|
|
|
|
clr = {
|
|
"norm":"\033[00m", # Reset to normal
|
|
"bold":"\033[01m", # Bold Text
|
|
"ital":"\033[03m", # Italic Text
|
|
"undr":"\033[04m", # Underlined
|
|
"blnk":"\033[05m", # Blinking
|
|
|
|
# Text
|
|
"tdbl":"\033[30m", # Dark Black
|
|
"tdrd":"\033[31m", # Dark Red
|
|
"tdgr":"\033[32m", # Dark Green
|
|
"tdyl":"\033[33m", # Dark Yellow
|
|
"tdbu":"\033[34m", # Dark Blue
|
|
"tdma":"\033[35m", # Dark Magenta
|
|
"tdcy":"\033[36m", # Dark Cyan
|
|
"tdwh":"\033[37m", # Dark White
|
|
|
|
"tbbl":"\033[90m", # Bright Black
|
|
"tbrd":"\033[91m", # Bright Red
|
|
"tbgr":"\033[92m", # Bright Green
|
|
"tbyl":"\033[93m", # Bright Yellow
|
|
"tbbu":"\033[94m", # Bright Blue
|
|
"tbma":"\033[95m", # Bright Magenta
|
|
"tbcy":"\033[96m", # Bright Cyan
|
|
"tbwh":"\033[97m", # Bright White
|
|
# Background
|
|
"bdbl":"\033[40m", # Dark Black
|
|
"bdrd":"\033[41m", # Dark Red
|
|
"bdgr":"\033[42m", # Dark Green
|
|
"bdyl":"\033[43m", # Dark Yellow
|
|
"bdbu":"\033[44m", # Dark Blue
|
|
"bdma":"\033[45m", # Dark Magenta
|
|
"bdcy":"\033[46m", # Dark Cyan
|
|
"bdwh":"\033[47m", # Dark White
|
|
|
|
"bbbl":"\033[100m", # Bright Black
|
|
"bbrd":"\033[101m", # Bright Red
|
|
"bbgr":"\033[102m", # Bright Green
|
|
"bbyl":"\033[103m", # Bright Yellow
|
|
"bbbu":"\033[104m", # Bright Blue
|
|
"bbma":"\033[105m", # Bright Magenta
|
|
"bbcy":"\033[106m", # Bright Cyan
|
|
"bbwh":"\033[108m" # Bright White
|
|
}
|