FreeCAD / FreeCAD/AddonManager

Python Package Manager in 26.3 BUG when directory does not exist.

Open Beginner friendly
#490 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
18
Forks
29
Avg merge
1d 15h
Merged PRs (30d)
22

Description

I built 26.3 under Linux Mint and ran into an error with the Python Package Manager. I am assuming this issue belongs here since it is so closely related to the Addon Manager.

Here is the output from the python console:
14:47:47 Traceback (most recent call last):
14:47:47 File "/home/john/FreeCAD/build/historical-python-store-test/Mod/AddonManager/addonmanager_python_deps_gui.py", line 79, in _install_button_clicked
14:47:47 self.model.install_packages(packages.split())
14:47:47 File "/home/john/FreeCAD/build/historical-python-store-test/Mod/AddonManager/addonmanager_python_deps.py", line 318, in install_packages
14:47:47 self._install_or_update_packages([*installed, *packages], PipCommand.Install)
14:47:47 File "/home/john/FreeCAD/build/historical-python-store-test/Mod/AddonManager/addonmanager_python_deps.py", line 326, in _install_or_update_packages
14:47:47 os.rename(self.vendor_path, self.vendor_path + ".old")
14:47:47 FileNotFoundError: [Errno 2] No such file or directory: '/home/john/.local/share/FreeCAD/v26-3/AdditionalPythonPackages/py311' -> '/home/john/.local/share/FreeCAD/v26-3/AdditionalPythonPackages/py311.old'

The solution is simply to ensure the path exists before it is renamed. Then the Python Package Manager can successfully rename it to *.old and packages can be installed.

Conceptually if it is doing this:
os.rename(self.vendor_path, self.vendor_path + ".old")

This would be better:
if os.path.exists(self.vendor_path):
os.rename(self.vendor_path, self.vendor_path + ".old")

To workaround, simply make the directory from the command line before running the Python Package Manager, and it will work. Presumably this is done by the installer, but since I built from source, I don't know.

My FreeCAD version info:
OS: Linux Mint 22.3 (X-Cinnamon/cinnamon/xcb)
Architecture: x86_64
Version: 26.3.0dev.48363 +1 (Git)
Build date: 2026/09/02 06:41:46
Build type: Release
Branch: historical-python-store-test
Hash: 9ca8f05179a7e992000bcced36f457dba2b086de
Python 3.11.14, Qt 6.8.3, Coin 4.0.10 (bundled), Pivy 0.6.11 (bundled), Vtk 9.3.1, boost 1_86, Eigen3 3.4.0, PySide 6.8.3
shiboken 6.8.3, xerces-c 3.3.0, Clipper2 , OCC 7.8.1
Locale: English/United States (en_US)
Stylesheet/Theme/QtStyle: FreeCAD.qss/FreeCAD Dark/
QPA/File dialog/Color dialog: xcb/via Qt/via Qt
Navigation Style/Orbit Style/Rotation Mode: OpenSCAD/Trackball/Drag at cursor
Logical DPI/Physical DPI/Pixel Ratio: 96/129.444/1
OpenGL version/vendor/renderer: 4.6 (Compatibility Profile) Mesa 25.2.8-0ubuntu0.24.04.2/AMD/AMD Radeon 890M Graphics (radeonsi, gfx1150, LLVM 20.1.2, DRM 3.64, 6.17.0-1032-oem)
Installed mods:
* Assembly4 0.61.1
* Curves workbench 0.6.81
* Fasteners Workbench 0.5.65

Contributor guide

No contributing guide indexed for this repository

Research direction

Start in Mod/AddonManager/addonmanager_python_deps.py at _install_or_update_packages, around line 326, where the missing vendor path is renamed. Reproduce with a nonexistent /AdditionalPythonPackages/py311 directory using the Python Package Manager. Done means installation no longer raises FileNotFoundError when that directory is absent and packages can be installed successfully.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
tooling
Issue type
Bug
Difficulty
1/5
Estimated time
Under an hour
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
88/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.