One thing to note is that it is relatively easy to decompile and reverse engineer Python bytecode and remove any protection you put into it, so it's usually not worth it to spend too much effort and time on implementing a crack-proof protection. You just want to put enough to keep people honest.
If your concern is that businesses buy the correct number of seats, one basic protection mechanism is to use a public key mechanism to put a digital signature to a message using a private key on your licensing server. The message is just a random string and some uniquely identifying information that restricts the machine that the license key is valid for (e.g. MAC address, etc), and perhaps a timestamp if you want to expire the key. This message and the signature is then encoded in a string that your customers put into your program, which validate the license key by verifying that signature matches the message and the message matches the machine.
There are simpler schemes if all you care is that the user has a key (not that they have a different key for different machines); you can simply use a totally random string for the message.
This scheme is secure as long as the user does not reverse engineer your code. It can be bypassed by reverse engineering the public key in your program with their own public key. It can also be bypassed by tampering the information used to identify the computer, e.g. MAC address; tampering these informations may allow multiple installations using the same key.