# How to get the proper rotation difference between two vectors using quaternions?

I'm trying to calculate the vector difference between a face normal and an object. This is similar to some other questions, such as this one:

Python script get face normal, then set it as another object's orientation (Z-axis) accordingly

I can get the cone to align properly in the example, but a very similar action using a vector other than 'Up' doesn't rotate the way I would expect.

In this example the cube is facing the opposite direction of the wall. I simply want to calculate the angle difference and rotate the cube to match the wall. To accomplish that I use the following code (skipping to the important bits):

>>> norm
Vector((-1.0, 0.0, 0.0))

>>> cabvec
Vector((1.0, 0.0, 0.0))

>>> norm.rotation_difference(cabvec)
Quaternion((-4.371138828673793e-08, -0.0, -0.7071067690849304, -0.7071067690849304))


Which flips it around, and turns it on its side (which may be happening to the cone also, but the cone shape is forgiving in this aspect).

What I would want in this situation is a result that simply flips the object on the z-axis 180 degrees. Which in the quaternion nomenclature would look like this:

>>> mathutils.Quaternion((0.0, 0.0, 1.0), math.radians(180.0))
Quaternion((-0.0, -0.0, -0.0, -1.0))


So I'm missing something on how to properly set up and calculate these rotations.

norm -->  <Vector (-0.9970, -0.0776, 0.0000)>