Another interesting option is FreeCAD, which is scriptable in Python but its primary interface is a GUI. So you can use a script to create things programmatically, edit graphically, or both.
FreeCAD sounds great but in practice it’s sooo slow.
If you are coming from SolidWorks, Fusion360, Inventor, or OnShape, it won’t take long before you start finding that there are a lot of things missing from it.
Isn't the Python scripting in FreeCAD just a direct representation of the internal object model?
It's _not_ something which was designed for ease of use, or rational semantics, or to facilitate expression.