When you read the OpenGL specs, all the functions and constants are defined without the “gl” and “GL_” prefixes respectively. When an actual API is implemented in a language like C, it is usual to add these.
This makes sense in a language without namespaces, but in Python, which has them, it doesn’t really make sense. Consider a simple sequence like
Take the most popular OpenGL wrappers for python PyOpengl it also uses gl prefix
its simple, laziness
it may sound crazy but its actually more lazy to write glBegin than Begin and the reason being is that we coders love to copy paste code
and as you may have guessed it by now the vast majority of OpenGL code online is written in C/C++ which use the gl prefix.
So it makes more sense to keep the prefix and make copy pasting much easier and also porting C/C++ OpenGL code to Python than actually make it easier to write code from scratch.
It also works both ways , if your python code does not work there is no way to know for sure if they are the wrappers or the actual Opengl code so again you will have to port code from python to C because C/C++ has the best IDEs for debugging OpenGL code giving you all the precise errors you need plus, inspecting low level memory inside and outside the GPU etc.