forked from tpd94/CDRM-Project
refactor Python checks for improved validation
This commit is contained in:
parent
1328805fa5
commit
5f217f2995
@ -1,33 +1,26 @@
|
||||
"""Module to check for the Python version and environment."""
|
||||
|
||||
import sys
|
||||
import os
|
||||
import subprocess
|
||||
import venv
|
||||
import importlib.util
|
||||
|
||||
|
||||
def version_check():
|
||||
major_version = sys.version_info.major
|
||||
minor_version = sys.version_info.minor
|
||||
|
||||
if major_version >= 3:
|
||||
if minor_version >= 12:
|
||||
return
|
||||
else:
|
||||
exit("Python version 3.12 or higher is required")
|
||||
else:
|
||||
exit("Python 2 detected, Python version 3.12 or higher is required")
|
||||
"""Check for the Python version."""
|
||||
if sys.version_info < (3, 12):
|
||||
sys.exit("Python version 3.12 or higher is required")
|
||||
|
||||
|
||||
def pip_check():
|
||||
try:
|
||||
import pip
|
||||
|
||||
return
|
||||
except ImportError:
|
||||
exit("Pip is not installed")
|
||||
"""Check for the pip installation."""
|
||||
if importlib.util.find_spec("pip") is None:
|
||||
sys.exit("Pip is not installed")
|
||||
|
||||
|
||||
def venv_check():
|
||||
# Check if we're already inside a virtual environment
|
||||
"""Check for the virtual environment."""
|
||||
if hasattr(sys, "real_prefix") or (
|
||||
hasattr(sys, "base_prefix") and sys.base_prefix != sys.prefix
|
||||
):
|
||||
@ -40,20 +33,20 @@ def venv_check():
|
||||
else os.path.join(venv_path, "Scripts", "python.exe")
|
||||
)
|
||||
|
||||
# If venv already exists, restart script using its Python
|
||||
if os.path.exists(venv_path):
|
||||
subprocess.call([venv_python] + sys.argv)
|
||||
sys.exit()
|
||||
|
||||
# Ask user for permission to create a virtual environment
|
||||
answer = ""
|
||||
while not answer or answer[0].upper() not in {"Y", "N"}:
|
||||
answer = input(
|
||||
"Program is not running from a venv. To maintain compatibility and dependencies, this program must be run from one.\n"
|
||||
"Would you like me to create one for you? (Y/N): "
|
||||
answer = (
|
||||
input(
|
||||
"Program is not running from a virtual environment. To maintain "
|
||||
"compatibility, this program must be run from one.\n"
|
||||
"Would you like to create one? (Y/N): "
|
||||
)
|
||||
|
||||
if answer[0].upper() == "Y":
|
||||
.strip()
|
||||
.upper()
|
||||
)
|
||||
if answer.startswith("Y"):
|
||||
print("Creating virtual environment...")
|
||||
venv.create(venv_path, with_pip=True)
|
||||
subprocess.call([venv_python] + sys.argv)
|
||||
@ -64,19 +57,35 @@ def venv_check():
|
||||
|
||||
|
||||
def requirements_check():
|
||||
try:
|
||||
import pywidevine
|
||||
import pyplayready
|
||||
import flask
|
||||
import flask_cors
|
||||
import yaml
|
||||
import mysql.connector
|
||||
|
||||
"""Check for the requirements."""
|
||||
required_packages = [
|
||||
"pywidevine",
|
||||
"pyplayready",
|
||||
"flask",
|
||||
"flask_cors",
|
||||
"yaml",
|
||||
"mysql.connector",
|
||||
]
|
||||
missing = []
|
||||
for pkg in required_packages:
|
||||
if "." in pkg:
|
||||
parent, _ = pkg.split(".", 1)
|
||||
if (
|
||||
importlib.util.find_spec(parent) is None
|
||||
or importlib.util.find_spec(pkg) is None
|
||||
):
|
||||
missing.append(pkg)
|
||||
else:
|
||||
if importlib.util.find_spec(pkg) is None:
|
||||
missing.append(pkg)
|
||||
if not missing:
|
||||
return
|
||||
except ImportError:
|
||||
|
||||
while True:
|
||||
user_input = (
|
||||
input("Missing packages. Do you want to install them? (Y/N): ")
|
||||
input(
|
||||
f"Missing packages: {', '.join(missing)}. Do you want to install them? (Y/N): "
|
||||
)
|
||||
.strip()
|
||||
.upper()
|
||||
)
|
||||
@ -87,7 +96,7 @@ def requirements_check():
|
||||
)
|
||||
print("Installation complete.")
|
||||
break
|
||||
elif user_input == "N":
|
||||
if user_input == "N":
|
||||
print("Dependencies required, please install them and run again.")
|
||||
sys.exit()
|
||||
else:
|
||||
@ -95,6 +104,7 @@ def requirements_check():
|
||||
|
||||
|
||||
def run_python_checks():
|
||||
"""Run the Python checks."""
|
||||
if getattr(sys, "frozen", False): # Check if running from PyInstaller
|
||||
return
|
||||
version_check()
|
||||
|
Loading…
x
Reference in New Issue
Block a user