The private key file contains all of the keypair. components (and even I not the public part can be calculated from the private parameters) It does contain the public part which it puts into the self signed certificate or certificate signing request, and it needs the private part to actually do the (self)signing.
You can export the public part from the private key file with:
openssl rsa -pubout -in private_key.pem -out public_key.pem