Просто дополнительно информация:
- Я хочу сохранить индикатор выполнения и все такое, если это вообще применимо.
- Фактические пакеты не поддерживаются. в скрипте, поэтому все не так долго ([пакеты]).
-> Найдены неустановленные модули, установить их? (да/нет)
да
27 мая 2024 г. 15: 22:01,074 - ОТЛАДКА - Установка отсутствующих модулей...
27.05.2024 15:22:01,315 - ОТЛАДКА - Проверка отсутствия модулей...
2024-05-27 15:22:01,390 - ИНФОРМАЦИЯ - Отсутствующие пакеты: [пакеты]
Найдены неустановленные модули, установить их? (да/нет)
да
27 мая 2024 г. 15: 22:05,059 - ОТЛАДКА - Установка отсутствующих модулей...
27.05.2024 15:22:05,301 - ОТЛАДКА - Проверка отсутствия модулей...
27.05.2024 15:22:05,372 - ИНФОРМАЦИЯ - Отсутствующие пакеты: [пакеты]
Найдены неустановленные модули, установить их? (да/нет)
y
и затем цикл повторяется.
Это код, который я использую для этого:
Код: Выделить всё
imports (shortened, req imports are here)
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
def install_package(package):
"""Install a single package using pip."""
try:
subprocess.check_call([sys.executable, "-m", "pip", "install", package])
logging.info(f"Successfully installed {package}")
except subprocess.CalledProcessError as e:
logging.error(f"An error occurred while installing {package}: {e}")
def install_packages_with_progress(packages):
"""Install multiple packages with a progress bar."""
for package in tqdm(packages, desc="Installing Packages", ncols=100):
install_package(package)
time.sleep(0.5)
def check_missing_packages(packages):
"""Check for missing packages and return a list of them."""
missing_packages = []
for package in packages:
try:
pkg_resources.require(package)
except (pkg_resources.DistributionNotFound, pkg_resources.VersionConflict):
missing_packages.append(package)
return missing_packages
def clear_screen():
"""Clear the terminal screen."""
if os.name == "nt":
os.system("cls")
else:
os.system("clear")
print("\033[H\033[J", end="")
clear_screen()
required_packages = [
packages
]
logging.debug("Checking for missing modules...")
missing_packages = check_missing_packages(required_packages)
if missing_packages:
logging.info(f"Missing packages: {missing_packages}")
install = input(" -> Uninstalled Modules Found, Install Them? (y/n)\n>> ").strip().lower() == "y"
if install:
logging.debug("Installing missing modules...")
subprocess.check_call([sys.executable, "-m", "pip", "install", "--upgrade", "pip"], stdout=subprocess.DEVNULL)
install_packages_with_progress(missing_packages)
# Re-check for missing packages after installation
missing_packages = check_missing_packages(required_packages)
if not missing_packages:
logging.debug("All required modules installed successfully! Reboot the program...")
time.sleep(5)
else:
logging.error("Some modules could not be installed. Please check the errors and try again.")
exit(1)
else:
logging.debug("Aborting installation...")
exit(1)
else:
logging.debug("All required modules are already installed.")
clear_screen()
exit()
Подробнее здесь: https://stackoverflow.com/questions/785 ... e-compiled