Dá uma olhada no pacote "click" - ele tornarealmente simples criar
funcionalidades que são chamadas a partir da linha de comando. -
e a docuemntação deve orientar como criar um pacote certinho: aí você não precisa
de um único executável, como o "pyinstaller" gera: o seu programa continua sendo
umn arquivo .py, editável e compilado de forma transparente - mas o instalador
do seu pacote gera um ou mais arquivos ".exe" que ficam na pasta
do seu "python.exe" - e funcionam na linha de comando.
No meu projeto artístico - o "terminedia", que é uma lib para
desenvolvedores, eu configuro vários programas de exemplo desse jeito.
Assim, o usuário só precisa instaalr com "pip install terminedia", e segundos depois
tem prontos pra uso os programas de linha de comando "terminedia-text", "terminedia-image",
"terminedia-snake", entre outros.