You will need to subclass pyglet.sprite.Sprite and override the following method:
def set_state(self):
glEnable(self.texture.target)
glBindTexture(self.texture.target,
self.texture.id)
glPushAttrib(GL_COLOR_BUFFER_BIT)
glEnable(GL_BLEND)
glTexParameteri(self.texture.target, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
glBlendFunc(self.blend_src, self.blend_dest)
The reason this works is due to the way pyglet handles the OpenGL state machine. When a sprite is going to get drawn, pyglet will execute the OpenGL commands inside Sprite.set_state so that the texture is rendered as intended. There really isn't an easier way. I've tested this, and on my computer, it works fine, even with fractional scale values on the sprite.