Skip to content

Releases: schnidi/VenvHub

v2.5.24

Choose a tag to compare

@schnidi schnidi released this 05 Aug 20:43

VenvHub Pro - Consolidated Release Notes (Changelog)

Version: v2.5.24 (Cumulative Release from v2.5.22 to v2.5.24)
This document consolidates all architectural improvements, new features, security fixes, and bug fixes introduced across versions 2.5.23 and 2.5.24.


🚀 New Features and Improvements

Automatic Core Build Tools Injection (setuptools & wheel) [v2.5.24]

  • Self-Healing Venv Creation: Updated create.py and pip_installer.py to automatically inject setuptools and wheel into every newly created virtual environment and repaired Python runtime.
  • Embedded Python Support: Guaranteed that embedded and portable Python environments are fully equipped out of the box to build and install complex packages without requiring manual intervention.

Multi-Level Path Normalization for Nested Requirements [v2.5.24]

  • Recursive File Discovery: Implemented PipManager._get_all_requirement_files() to recursively scan and resolve all nested requirement files (e.g., -r subfolder/requirements.txt).
  • Complete Path Sanitization: Integrated PathNormalizer.sanitize_requirements_file() across all discovered requirement files before initiating package installation. This guarantees cross-platform path slash compatibility (/ vs \).

Preserved Native Package Specifiers & Environment Markers [v2.5.24]

  • Full Pip/UV Feature Preservation: Refactored requirement installation logic to preserve native version specifiers (==, >=), environment markers (sys_platform), extra index URLs, and direct editable links (-e) while eliminating path syntax errors.

Clean Architecture & Single Responsibility Principle (APT System) [v2.5.23]

  • Structural Overhaul: The APT dependency system underwent a major architectural cleanup. The AptListener was stripped of heavy logic and now acts strictly as an Interceptor (capturing actions).
  • Logic Migration: All analytical methods (e.g., _get_editable_packages, _is_package_required_by_others, _get_requires_for_package) were moved to the core AptLogic module. The core logic analyzes data while the listener manages the UI flow.

Dependency Injection & Inversion of Control (Container Logic) [v2.5.23]

  • Modern Design Pattern: Implemented Dependency Injection in the HookManager (hook.py).
  • Dynamic Registration: Instead of hardcoding dependencies, HookManager now allows external modules (such as RespawnManager) to dynamically register their crash-checking functions (register_respawn_checker), making container lifecycle management modular and testable.

🐛 Bug Fixes and Stability

Security Fix for Path Traversal & Symlink Vulnerabilities in RequirementsParser [v2.5.24]

  • Root Entry Point Boundary Enforcement: Fixed a critical security vulnerability in RequirementsParser.parse() where initial entry files (such as symlinks pointing to unauthorized files outside the project root) bypassed Path Traversal checks. Directory boundary validation is now strictly executed at the entry point for both primary and recursively nested (-r) requirement files.

Fix for PEP 517 Build Backend Failures [v2.5.24]

  • Resolved BackendUnavailable Error: Fixed the issue where installing local editable packages (-e) failed with Cannot import 'setuptools.build_meta'. Pre-installing setuptools and wheel into the environment ensures smooth PEP 517 builds.

Fix for Windows/Linux Slash Mismatches in -r Flag [v2.5.24]

  • Path Parsing Fix: Resolved errors where pip install -r crashed due to unescaped Windows backslashes or malformed relative paths inside nested requirements files.

Embedded Python Environment Post-Processing [v2.5.24]

  • EmbedPythonCreated Service Enhancement: Streamlined post-creation verification (verify_pip_functional & fix_pth_file) to ensure ._pth files are unlocked and site-packages is immediately accessible.

Resolved APT Circular Dependency Loop [v2.5.23]

  • Fix: Completely eliminated a critical circular import loop between apt_listener.py and apt_logic.py.
  • Impact: Prevents hidden ImportError crashes during application startup or background operations.

Resolved Container Hook Circular Dependency Loop [v2.5.23]

  • Fix: Broke an architectural loop between hook.py and respawn_multi.py in the container logic folder.
  • Impact: hook.py no longer imports the Respawn Manager directly to check failure counts, ensuring seamless background terminal management.

🧹 Code Refactoring & Project Housekeeping

Decoupled About Dialog (AboutLogic Service) [v2.5.24]

  • Eliminated Circular Dependencies: Extracted multilingual HTML parsing and dialog initialization logic from CustomTitleBar into a dedicated AboutLogic service (core/logic/sluzby/about_logic.py).
  • Dynamic Registration: Registered AboutDialog at startup in main.py, ensuring a clean architecture and preventing circular import risks.

📁 Modified and Affected Files

  • core/logic/sluzby/requirements_parser.py
  • core/logic/sluzby/apt_listener.py
  • core/logic/sluzby/apt_logic.py
  • core/logic/sluzby/about_logic.py
  • core/logic/sluzby/pip_installer.py
  • core/logic/sluzby/create.py
  • core/logic/containers/logic/hook.py
  • core/logic/containers/logic/respawn_multi.py
  • main.py

v2.5.22

Choose a tag to compare

@schnidi schnidi released this 29 Jul 19:27

📝 VenvHub Pro - Release Notes (Changelog)

Version: v2.5.22 (Jump from version v2.5.17)
This document summarizes all differences, new features, and bug fixes between versions 2.5.17 and 2.5.22.


🚀 New Features and Improvements

Intelligent Dependency Management (APT Logic and Uninstall Guard)

  • An invisible background process (AptListener.start_listening) was added to monitor installations and uninstallations.
  • Uninstall Guard: The system now prevents the user from uninstalling a package that other installed packages depend on (prevents breaking the environment).
  • Auto-Remove: Automatic removal of "orphaned" dependencies when the main package is uninstalled (similar to apt-get autoremove in Linux).

Parallel Package Loading (Pip Manager Speedup)

  • Parallel processing (concurrent.futures.ThreadPoolExecutor) was implemented in the load_list.py file.
  • The list of installed and outdated packages is now loaded concurrently, cutting the Pip Manager loading time in half.

New Robust Parser for requirements.txt

  • Created a new service RequirementsParser that reads package requirements with extreme precision.
  • Supports nested files (-r), editable installations (-e), direct URL links (@ url), ignoring comments, and line continuation (\).
  • Includes security protection against Path Traversal attacks.

Bulk Operations

  • New commands show_multiple and uninstall_multiple were added to pip_commands.py and uv_commands.py for extremely fast bulk operations on packages.

Comprehensive Test Suite

  • Added a tests/ folder to the project structure with an extensive suite of automated tests (e.g., test_detectors_flow.py, test_apt_listener.py, test_requirements_parser.py).

🐛 Bug Fixes and Stability

Thread-Safety Locks (Protection Against Freezes and Thread Crashes)

  • LanguageManager: Added threading.Lock(). Prevents application crashes if multiple windows attempt to read/change language files simultaneously.
  • AptLogic: Implemented reentrant locks (threading.RLock) separated for each virtual environment (Venv). Multiple operations in a single Venv can no longer conflict over writing to files.

Atomic Configuration Writing (Data Loss Protection)

  • In system_listener.py, the method for saving portable_system_py.json was rewritten. Data is first written to a temporary file (.tmp), flush to disk is forced (os.fsync), and subsequently the old file is replaced in a single atomic operation (os.replace). If the PC crashes during saving, the configuration file will never be corrupted.

GUI Freeze Fixes

  • In python_ver.py, when deleting runtimes, signals were connected with an explicit Qt.ConnectionType.QueuedConnection parameter. This prevented the main window from freezing when working with background threads.

More Accurate and Safer uv Installer Detection

  • The uv_detector.py module underwent a complete rewrite. The old (slow and error-prone) method using pip show uv was replaced by intelligent searching.
  • The application now strictly checks whether the detected uv.exe actually belongs to the actively selected Python. This prevents launching an incompatible uv from another (foreign) Python version.
  • Added an accurate error message in the GUI if the user attempts to enable uv for a Python that does not have it installed.

Proper Pip Worker Success Evaluation

  • In the PipWorker and UpdateAllWorker classes, the self.success attribute was fixed. Previously, callbacks for APT logic could trigger even when a background installation actually failed (e.g., due to an error code). Now, process.returncode == 0 is checked.

v2.5.17

Choose a tag to compare

@schnidi schnidi released this 19 Jul 22:06

Changelog and Bug Fixes – VenvHub Pro v2.5.17

This release focuses on resolving bugs related to coordination with the VS Code development environment and local package management (Linker). Below is an overview of the key changes you will notice during daily use:

Selective Task Scanning:

Where the change occurred: In the process of transferring tasks and keybindings to VS Code.
How it works now: The application no longer scans the entire local packages root folder upon saving. It analyzes only those modules that are actively checked for the current environment. This prevents tasks from unrelated (unlinked) projects from cluttering your active editor.

Consistent Task Removal Upon Deactivation (Brutal Check):

Where the change occurred: In the package removal logic.
How it works now: When unchecking (deactivating) a package, the program reads its configuration and safely removes the associated tasks and keybindings from VS Code without affecting any tasks you created manually in the editor.

Recovery System for Manually Deleted Folders:

Where the change occurred: Through the introduction of a tracking helper file (.vscode/venvhub_tracker.json).
How it works now: If you delete a local package folder manually via File Explorer without unchecking it first in the application, the program will not halt. It utilizes the information from the tracking helper file (the "receipt") to safely identify and clean up the orphaned tasks from the VS Code configuration.

Task Alignment During Environment Switching:

Where the change occurred: In the default environment activation service (clicking the "Star" in the Manager).
How it works now: Previously, when switching to another Venv, the program only updated the Python interpreter paths, leaving tasks from the previous environment behind in the editor. As of version 2.5.17, changing the default Venv automatically aligns all associated tasks and keybindings in VS Code (deregistering old ones and writing new ones).

Automatic Cleanup of Empty Configuration Files:

Where the change occurred: In the saving of configurations inside .vscode.
How it works now: If no active tasks or keybindings remain in tasks.json or keybindings.json after uninstalling a package or switching the Venv, the application physically deletes these empty files (including the tracking helper file) from the disk, preventing the accumulation of empty configuration files in the project folder.

Global Support and Integrity Verification for UV (Astral):

Where the change occurred: In the asynchronous workers managing bulk and individual package actions (PipWorkerAllUpdate, PipCommandWorker, and PipWorker).
How it works now: If the UV manager is active in your settings, the program automatically runs a background uv check after every package installation, uninstallation, or upgrade. If incompatible versions are identified, it automatically attempts a recovery (performing version downgrades or reinstalling exact compatible versions).

Full UV Integration for Quick Actions from the Mini-Bar:

Where the change occurred: In the quick installer of the Mini-Bar and Quick Settings.
How it works now: Quick package installation initiated directly from the mini-panel now respects the active UV manager and executes post-installation dependency checking and conflict resolution.

Legacy Codebase Cleanup:

Where the change occurred: Removal of redundant files (update_all.py and install.py).
How it works now: Outdated, unused scripts that did not support the UV installer and bypassed the unified dispatcher have been completely removed, ensuring a cleaner codebase and faster execution of the package management core.

v2.5.16

Choose a tag to compare

@schnidi schnidi released this 14 Jul 19:39

VenvHub Pro v2.5.16 Release Notes
We are excited to announce the release of VenvHub Pro v2.5.16! This update brings a major architectural overhaul, introducing a fully isolated local package linker (no UAC required), AI-powered dependency autopilot with UV, and deep, non-destructive VS Code integration.

✨ New Features
🔗 Local Package Linker (No UAC Required)
Introduced an advanced sys.meta_path Import Hook architecture. You can now link local packages to your virtual environments without creating filesystem junctions or requiring Administrator (UAC) privileges. Packages are dynamically resolved at runtime, making the system fully portable and secure.

⚙️ UV Autopilot (Dependency Auto-Fix)
Integrated Astral's ultra-fast uv package manager. When updating multiple packages, the system now automatically runs uv pip check and performs an intelligent Auto-Fix—downgrading conflicting packages to restore 100% environment stability without manual intervention.

💻 Isolated VS Code User Profiles
Full support for dedicated VS Code profiles using --user-data-dir and --extensions-dir. Each project or developer can now have completely isolated extensions, settings, and keybindings. You can import your current system profile into a portable container with a single click.

🧩 Meta-Sync for VS Code (Tasks & Keybindings)
Local packages can now define their own VS Code Tasks and Keybindings directly inside local_meta.json. When linked to a project, VenvHub Pro automatically injects these definitions into .vscode/tasks.json and .vscode/keybindings.json, eliminating manual configuration.

⚓ Orchestration Anchors (Kotva / Hook)
Added a robust inter-process signaling system for the Autostart Container. Scripts can now signal readiness by creating a unique file defined in the VENVHUB_KOTVA environment variable. The launcher waits for this signal before starting dependent services, ensuring sequential and reliable boot order.

⚡ Improvements
🧠 Smart Respawn & 3-Strike Rule
The Watchdog (Respawn Manager) now tracks consecutive crashes. If a process crashes 3 times in a row, the system blocks further restart attempts to prevent log flooding and infinite loops, keeping the system stable and allowing developers to inspect the error.

📁 Enhanced USB Portable Path Logic
When running in Portable mode, the system now automatically rewrites absolute paths inside .pth files (for pip -e packages) and .vscode/settings.json when the drive letter changes (e.g., from E: to F:). Projects remain functional instantly on any machine.

📦 Instant Birth Certificate Updates
The internal venv_birth_certificate.json is now regenerated automatically after every pip install, update, or uninstall operation. The environment state is always synchronized with the filesystem, eliminating lag or stale data in the UI.

🎨 Advanced Icon Modding & QSS Overrides
Complete overhaul of the theme engine. You can now replace all system Emoji characters with professional SVG icons using QSS qproperty- overrides. Added specific support for qproperty-scaledContents to perfectly scale window title bar icons regardless of Python backend constraints.

🧩 Architectural Enhancements
Dual-Framework (PyQt6/PySide6) Compatibility Bridge
The core now features a MetaPathFinder interceptor. The source code is written strictly for PyQt6, but the system automatically translates all imports to PySide6 at runtime if the environment only has PySide6 installed.

Windows Job Object & Process Handles
Implemented low-level Windows Job Objects and Process Handles (via ctypes). This guarantees that if the main VenvHub Pro application crashes, all child processes are immediately terminated by the OS. Additionally, holding Process Handles prevents the system from recycling PIDs, ensuring perfect process ownership tracking.

Process Ownership Matrika (Registry)
Introduced strict Process Ownership logic. If a process belongs to Group A, the "Stop" button in Group B will ignore it. This prevents accidental shutdowns of services that are shared between different container groups.

🐛 General Stability
Fixed various thread-locking issues in the Multi-run launcher.

Improved error handling in the Venv Validator for broken pyvenv.cfg files.

Optimized memory usage by clearing stale Process Handles on stop commands.

⚠️ Important for Upgrading:
If you are upgrading from an older version, your existing containers and Venvs are fully compatible. However, due to the new Import Hook architecture, we recommend re-linking your local packages (Linker) to activate the new No-UAC system.