There's a fascinating article on the Pygame site about how to combine Pygame and Cairo:
Unfortunately, Cairo uses premultiplied alpha, and Pygame uses non-premultiplied. This means that if I generate an surface with 0 < alpha < 1 with Cairo, I can't correctly blit it to a pygame surface, because I will get dark edges.
This patch corrects this problem by providing a new blitting mode intended for this case. I think it could also be more generally useful, as described in
Thanks for this.