在Python文件内转换Python脚本为EXE时遇‘无命令提供’错误,求排查
问题描述
尝试编写Python代码,先创建输出“Hello, world!”的myFile.py文件,再通过cx_Freeze库将其转换为EXE文件,当前代码如下:
from cx_Freeze import setup, Executable spyerFile = open("myFile.py", "w+") spyerFile.write("print(\"Hello, world!\")") # 创建Python文件 spyerFile.close() executables = [Executable("myFile.py", base=None)] packages = ["idna", "os", "sys"] options = { "build_exe": { "packages":packages, }, } setup( # 将Python文件转换为EXE文件 name = "myFile", options = options, version = "10.0", description = "", executables = executables )
运行时出现如下错误:
usage: myFile.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...] or: myFile.py --help [cmd1 cmd2 ...] or: myFile.py --help-commands or: myFile.py cmd --help error: no commands supplied
问题原因与解决方法
错误原因
cx_Freeze的setup()函数需要指定打包命令才能执行操作,直接运行脚本时没有传入命令参数,因此触发“no commands supplied”错误。
解决步骤
方案1:拆分脚本(推荐)
将创建文件和打包的逻辑分开,更清晰易维护:
- 单独创建
myFile.py:
print("Hello, world!")
- 创建打包脚本(命名为
setup.py):
from cx_Freeze import setup, Executable executables = [Executable("myFile.py", base=None)] # 简单程序不需要额外依赖包,可删除packages配置 options = { "build_exe": {} } setup( name = "myFile", options = options, version = "10.0", description = "", executables = executables )
- 打开命令行,进入脚本所在目录,运行:
python setup.py build
执行完成后,会生成build文件夹,里面包含可执行文件。
方案2:在原脚本中自动添加命令
如果要保留在同一个脚本里完成创建文件和打包,可通过sys.argv自动补充命令:
import sys from cx_Freeze import setup, Executable # 创建myFile.py(用with语句更安全) with open("myFile.py", "w+") as spyerFile: spyerFile.write("print(\"Hello, world!\")") executables = [Executable("myFile.py", base=None)] options = { "build_exe": {} } # 如果没有传入命令,自动添加build命令 if len(sys.argv) == 1: sys.argv.append("build") setup( name = "myFile", options = options, version = "10.0", description = "", executables = executables )
直接运行该脚本即可自动执行打包操作。
额外优化
你的packages列表里的idna、os、sys对于这个简单的HelloWorld程序完全不需要,删除后可以大幅减少打包生成的文件体积。
内容的提问来源于stack exchange,提问作者Wolf
相关产品推荐
相关产品推荐

