I was hoping to freeze a Python CLI made with click
using PyInstaller.
I found this answer which makes it work with click commands, unfortunately it doesn't work for applications with subcommands.
I've got the following code to demonstrate the issue:
In cli.py
import sys
import click
@click.group()
def bar():
pass
@bar.command()
def baz():
click.echo('yo')
if __name__ == "__main__":
if getattr(sys, 'frozen', False):
bar(sys.argv[1:])
else:
bar()
I run the following pyinstaller
command:
pyinstaller --noconfirm --name bar --clean "cli.py"
And I get the following output:
Traceback (most recent call last):
File "tests\bar\cli.py", line 18, in <module>
File "click\core.py", line 722, in __call__
File "click\core.py", line 696, in main
File "click\core.py", line 621, in make_context
File "click\core.py", line 1015, in parse_args
File "click\utils.py", line 259, in echo
File "click\_compat.py", line 577, in _safe_write
File "colorama\ansitowin32.py", line 40, in write
File "colorama\ansitowin32.py", line 141, in write
File "colorama\ansitowin32.py", line 169, in write_and_convert
File "colorama\ansitowin32.py", line 174, in write_plain_text
File "click\_winconsole.py", line 180, in write
File "click\_compat.py", line 63, in write
File "click\_winconsole.py", line 164, in write
OSError: Windows error 6
[173704] Failed to execute script cli
I am using Python 2.7.13 on a Windows 10 OS.
I could not try py2exe
, cx-Freeze
, briefcase
or the likes due to my job environment.
Has someone else stumbled upon this issue before ?
I'll try with argparse to see if I got the same issue.