OpenCV has very good documentation on generating SIFT descriptors, but this is a version of \"weak SIFT\", where the key points are detected by the original Lowe algorithm.
Inspite of the OpenCV way being the standard, it was too slow for me. So for that, I used pyvlfeat, which is basically python bindings to VL-FEAT. The functions carry similar syntax as the Matlab functions