There is a beautiful Venn diagram add-on for matplotlib called matplotlib-venn. It looks like it can be completely customized to do what you are looking for, from the size of the circles (proportional to the set size), to inner and outer labels.
Using the example code on the website gives a plot like:
Edit: Per the comments below the following code gives non-overlapping circles with text using the same library:
import pylab as plt
from matplotlib_venn import venn3, venn3_circles
v = venn3(subsets=(1,1,0,1,0,0,0))
v.get_label_by_id('100').set_text('First')
v.get_label_by_id('010').set_text('Second')
v.get_label_by_id('001').set_text('Third')
plt.title("Not a Venn diagram")
plt.show()
Gives the diagram:
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…