Blender's object oriented approach uses a generic object for items in a scene with a varied data block that varies for each type of object. Using python we can create the lamp data and use it when adding an object to the scene, which can then be positioned where you want it. You could add a sun lamp and rotate it as desired, or if you wanted a spot light you could use a trackto constraint to point it at the object.
import bpy
from math import radians
# sun lamp
light_data = bpy.data.lamps.new('sun', 'SUN')
light_obj = bpy.data.objects.new('sun', light_data)
bpy.context.scene.objects.link(light_obj)
light_obj.location = (2.0,2.0,2.0)
light_obj.rotation_euler = (radians(10), radians(15), radians(20))
# spotlight
light_data = bpy.data.lamps.new('light', 'SPOT')
light_obj = bpy.data.objects.new('light', light_data)
bpy.context.scene.objects.link(light_obj)
light_obj.location = (2.0,2.0,2.0)
light_constr = light_obj.constraints.new('TRACK_TO')
light_constr.target = bpy.data.objects['Cube']
light_constr.track_axis = 'TRACK_NEGATIVE_Z'
light_constr.up_axis = 'UP_X'
light_data.spot_size = radians(25)