Skip to content

v2.5.22

Choose a tag to compare

@schnidi schnidi released this 29 Jul 19:27
· 1 commit to main since this release

馃摑 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.