When generate WIF private key , base58check('80'.decode('hex')) not prefix as '5'
By comparing all variables with this tool, I've found that the mistake is in this line:

print b58(extend.decode('hex') + sha2[:8])


Remember that sha2 is a byte array and not a hex string. You can replace the 8 with a 4 to make your code work.

You can also simplify the code even further to:

def b58(hex):
    return base58.b58encode_check(hex)

def sha256(hex):
    return hashlib.sha256(hex).digest()

def main():
    k = sha256('private_key')
    extend = '80'.decode('hex') + k
    print b58(extend)