Pymol, in either its commercial or open source edition, will be sufficient to make figures such as your examples. Pymol recognises "polar contacts" for the intermolecular interactions and has labels that can be used for residue codes. It is also scriptable and is widely used.
Yes, PyMol is one of the best programs for rendering IMO. Usually, you would create folder with your PDB file and a file that contains all the commands to create your image like shown here. You can create more than one file. Because PyMol is based on Python you can use all python syntax here. E.g. you can create multiple images and with for loops you can create series of images that you can combine to a movie later on.
Other programs to check out would be VMD. I use VMD for quick videos and images. The PyMol images I like better most of the time.
Or newer software like Samson modeling platform. I am not sure about the licensing conditions. Have not tried it yet.
Biopython does not support the generation of 3D molecular images. It is more a library for sequence data.
The other contributors have given great suggestions. I thought I ought to mention Michelaɴɢʟo, which is an online PDB file/PDB code/PyMOL-PSE/gene-name visualiser, where one can create an interactive page, add a description with special protein links (prolinks) that change the interactive protein view and then share the URL securely.
It has a modal to make the selection easier, but uses the NGL selection language and to show a ligand, one would add a residue type prolink selecting
ligand. If the neighbourhood-showing radius setting is greater than 1.0 Å (default is 3.0 Å) one will likely see hydrogen bonds with the neighbours.
One can try it without registering (free), but cannot keep the page for longer than a month or edit the description.
Disclaimer: I am the author.