fastecdsa is a Python module that exposes methods for point addition and multiplication, and it also gives you a convenience method to derive the public key from the private key. I know you don't want that part but it's worth mentioning if you ever want to get t without all the hard work.
Then you can just run the expression
Pub = Prv*G directly to get the public key from the private key, assuming you get the x and y coordinates of the G (generator) point of secp256k1.
from fastecdsa.curve import secp256k1
from fastecdsa.point import Point
# x and y are 256-bit hex numbers
Prv = Point(x, y, curve=secp256k1)
# update: fixed incorrect G points
gx = 0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798
gy = 0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8
G = Point(gx, gy, curve=secp256k1)
Pub = Prv*G
https://pypi.org/project/fastecdsa/