If you're down for mixing native code with your .NET/Python project you could inject code into other running processes and control behavior such as what programs they can run (e.g. control process execution via a hook on ntdll.dll!NtCreateSection), or something else similar.
If not then I recommend you follow advice given by other members already. I mean when the user logs on with the client you could change a registry value, drop a file to disk, send a signal to the server and then re-check this from within the Python program but someone could just replicate it manually and then use the Python tool without really logging in so... HWID/IP locking like Ninja suggested is useful too
I guess you could always try downloading the Python program from server once user logs in, then having it auto-removed when system reboots via using MoveFileEx (can be used for file removal on reboot:
https://msdn.microsoft.com/en-us/library...s.85).aspx ).
You could use a mix of techniques into one to make it more time consuming for an attacker...
Just remember there are tons of things to try just don't necessarily be so caught up on people breaking everything you implement.. gl ;)