I think this code should work. You'll need python-bitcoinlib -
https://github.com/petertodd/python-bitcoinlibfrom bitcoin.wallet import CBitcoinSecret, P2PKHBitcoinAddress
from bitcoin.core import x
privkey = '0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef'
secret = CBitcoinSecret.from_secret_bytes(x(privkey))
address = P2PKHBitcoinAddress.from_pubkey(secret.pub)
a = str(address)
-- edit --
Apologies, I just read the title of the thread properly. The above code is for private key to address.
Public keys might be trickier to deal with, depending on whether they are compressed or not.