У Pyinstaller'а есть
возможность шифровать байткод, но не факт, что это будет 100% надёжно и как оно будет собрано под винду - тоже отдельный вопрос.
Для пущей надежности защиты стоит или перенести важный функционал в сишную либу, как тут уже писали или использовать Cython (что суть есть тоже самое, только сишного кода сгенерится на порядок больше)