Obter o produto cartesiano de uma série de listas?

Como posso obter o produto cartesiano (todas as combinações possíveis de valores) de um grupo de lista

Entrada

somelists = [
   [1, 2, 3],
   ['a', 'b'],
   [4, 5]
]

Saída desejada:

[(1, 'a', 4), (1, 'a', 5), (1, 'b', 4), (1, 'b', 5), (2, 'a', 4), (2, 'a', 5) ...]