I see, sorry I wasn't at my workingmachine and couldn't try it out myself. Now I had the chance, but I didn't find a way to stop the PxrTexture from automatically changing the path from relative to absolute when setting the filepath, neither with python or by setting it by hand... However, I found a way to force renderman to keep the path relative.
I created a network node and added a string attribute to it, then I set the string to "<ws>/sourceimages/image.png" and connected it to the PxrTexture nodes filename attribute:
ntw = cmds.createNode("network")
cmds.addAttr(ntw, ln = "localString", dt = "string")
cmds.setAttr("{0}.localString".format(ntw), '<ws>/sourceimages/image.png', type = "string")
cmds.connectAttr("{0}.localString".format(ntw),'{0}.filename'.format(diff), f = True)
It's not pretty, but it seems to work, since a normal string attribute doesn't know what a path is and has no ambitions to override any characters and the filename attribute gets automatically locked when there is a connection on it.
But I also should mention, that I haven't used Renderman in quite some time and there probably is a better way of doing this that someone knows who uses it frequently.
Anyway, I hope it helps!