There's no 'proper' way to generate a bump map from a regular image because the 3D information simply isn't there. But if you know your textures are all from a similar source where directional lighting has been baked into the texture to some degree, you may be able to fake some usable bump maps via some standard image processing approaches.
PIL already offers this capability. You want one of the functions in the ImageFilter module, probably EMBOSS, eg.
color_bump_map = diffuse_map.filter(ImageFilter.EMBOSS)
grey_bump_map = ImageOps.grayscale(color_bump_map)
That should allow you to take an image like one on the left below, and generate one like one that on the right:
(This example was done in Photoshop, but using the same type of filters.)