冻结使用 Python 的 `click` 包创建的程序
Freeze a program created with Python's `click` pacage
我有一个使用 Python 的 click
包的命令行程序。我可以在本地安装 运行,没问题:
pip install --editable . # (or leave out the editable of course)
现在,我想创建一个可以分发和 运行 独立的可执行文件。通常,由于我处于 Windows 环境中,我会使用 py2exe
、pyinstaller
或 cx_Freeze
之一。但是,none 这些软件包有效。
更具体地说,它们都生成可执行文件,但可执行文件什么也不做。我怀疑这个问题是因为我的 main.py
脚本没有 main
函数。任何建议都会非常有帮助,提前致谢!
可以使用从 here 复制的代码重现问题。
hello.py
import click
@click.command()
def cli():
click.echo("I AM WORKING")
setup.py
from distutils.core import setup
import py2exe
setup(
name="hello",
version="0.1",
py_modules=['hello'],
install_requires=[
'Click'
],
entry_points="""
[console_scripts]
hello=hello:cli
""",
console=['hello.py']
)
如果有人可以提供工作 setup.py 文件来创建可执行文件和任何其他所需文件,将不胜感激。
从控制台:
python setup.py py2exe
# A bunch of info, no errors
cd dist
hello.exe
# no output, should output "I AM WORKING"
我更喜欢pyinstaller to the other alternatives, so I will cast an answer in terms of pyinstaller。
冻结时启动点击应用程序
你可以用pyinstaller检测你的程序何时被冻结,然后像这样启动click应用:
if getattr(sys, 'frozen', False):
cli(sys.argv[1:])
使用 pyinstaller 构建 exe
这个简单的测试应用可以简单地构建:
pyinstaller --onefile hello.py
测试代码:
import sys
import click
@click.command()
@click.argument('arg')
def cli(arg):
click.echo("I AM WORKING (%s)" % arg)
if getattr(sys, 'frozen', False):
cli(sys.argv[1:])
测试:
>dist\test.exe an_arg
I AM WORKING (an_arg)
我有一个使用 Python 的 click
包的命令行程序。我可以在本地安装 运行,没问题:
pip install --editable . # (or leave out the editable of course)
现在,我想创建一个可以分发和 运行 独立的可执行文件。通常,由于我处于 Windows 环境中,我会使用 py2exe
、pyinstaller
或 cx_Freeze
之一。但是,none 这些软件包有效。
更具体地说,它们都生成可执行文件,但可执行文件什么也不做。我怀疑这个问题是因为我的 main.py
脚本没有 main
函数。任何建议都会非常有帮助,提前致谢!
可以使用从 here 复制的代码重现问题。
hello.py
import click
@click.command()
def cli():
click.echo("I AM WORKING")
setup.py
from distutils.core import setup
import py2exe
setup(
name="hello",
version="0.1",
py_modules=['hello'],
install_requires=[
'Click'
],
entry_points="""
[console_scripts]
hello=hello:cli
""",
console=['hello.py']
)
如果有人可以提供工作 setup.py 文件来创建可执行文件和任何其他所需文件,将不胜感激。
从控制台:
python setup.py py2exe
# A bunch of info, no errors
cd dist
hello.exe
# no output, should output "I AM WORKING"
我更喜欢pyinstaller to the other alternatives, so I will cast an answer in terms of pyinstaller。
冻结时启动点击应用程序
你可以用pyinstaller检测你的程序何时被冻结,然后像这样启动click应用:
if getattr(sys, 'frozen', False):
cli(sys.argv[1:])
使用 pyinstaller 构建 exe
这个简单的测试应用可以简单地构建:
pyinstaller --onefile hello.py
测试代码:
import sys
import click
@click.command()
@click.argument('arg')
def cli(arg):
click.echo("I AM WORKING (%s)" % arg)
if getattr(sys, 'frozen', False):
cli(sys.argv[1:])
测试:
>dist\test.exe an_arg
I AM WORKING (an_arg)