- Added virtual environment (venv) check - Added pip check - Added minimum python version check - Added requirements.txt check - Added proxy support for front/back end - Added opengraph images for each url - Added pyinstaller support
85 lines
2.8 KiB
Python
85 lines
2.8 KiB
Python
import sys
|
|
import os
|
|
import subprocess
|
|
import venv
|
|
|
|
def version_check():
|
|
major_version = sys.version_info.major
|
|
minor_version = sys.version_info.minor
|
|
|
|
if major_version >= 3:
|
|
if minor_version >= 13:
|
|
return
|
|
else:
|
|
exit("Python version 3.13 or higher is required")
|
|
else:
|
|
exit("Python 2 detected, Python version 3.13 or higher is required")
|
|
|
|
def pip_check():
|
|
try:
|
|
import pip
|
|
return
|
|
except ImportError:
|
|
exit("Pip is not installed")
|
|
|
|
def venv_check():
|
|
# Check if we're already inside a virtual environment
|
|
if hasattr(sys, 'real_prefix') or (hasattr(sys, 'base_prefix') and sys.base_prefix != sys.prefix):
|
|
return
|
|
|
|
venv_path = os.path.join(os.getcwd(), 'cdrm-venv')
|
|
venv_python = os.path.join(venv_path, 'bin', 'python') if os.name != 'nt' 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): '
|
|
)
|
|
|
|
if answer[0].upper() == 'Y':
|
|
print("Creating virtual environment...")
|
|
venv.create(venv_path, with_pip=True)
|
|
subprocess.call([venv_python] + sys.argv)
|
|
sys.exit()
|
|
else:
|
|
print("Exiting program. Please run it from a virtual environment next time.")
|
|
sys.exit(1)
|
|
|
|
|
|
def requirements_check():
|
|
try:
|
|
import pywidevine
|
|
import pyplayready
|
|
import flask
|
|
import flask_cors
|
|
import yaml
|
|
import mysql.connector
|
|
return
|
|
except ImportError:
|
|
while True:
|
|
user_input = input("Missing packages. Do you want to install them? (Y/N): ").strip().upper()
|
|
if user_input == 'Y':
|
|
print("Installing packages from requirements.txt...")
|
|
subprocess.check_call([sys.executable, "-m", "pip", "install", "-r", "requirements.txt"])
|
|
print("Installation complete.")
|
|
break
|
|
elif user_input == 'N':
|
|
print("Dependencies required, please install them and run again.")
|
|
sys.exit()
|
|
else:
|
|
print("Invalid input. Please enter 'Y' to install or 'N' to exit.")
|
|
|
|
def run_python_checks():
|
|
if getattr(sys, 'frozen', False): # Check if running from PyInstaller
|
|
return
|
|
version_check()
|
|
pip_check()
|
|
venv_check()
|
|
requirements_check() |