其中:
然后选择对应的路径,比如我的是第一个。
切换到项目目录下执行
待执行完毕,可以项目文件下生成两个文件夹dist中为msi安装文件,在其他windows服务器安装后就为build下的文件内容,在build下的exe.win-amd64-3.6下的windows.exe 就可打开小工具
【注意:】要切换到python3.5,否则还要安装用到的包。
cx_Freeze 需要通过一个 简单的安装脚本 来进行构建。一般来说,只要 Python 脚本本身能无错运行在自身环境,且 cx_Freeze distutils 安装脚本配置得当,那么构建出的可执行文件就能在任何相同操作系统下运行。作为开始,首先充分调试自己的 Python 脚本(不妨假设其名为 main.py)。main.py 允许从任何库或其他脚本中导入,甚至用 os.system() 或 subprocess.run() 等调用其他程序。确认无误后,在 windows.py 所在目录下新建一个较简单的 cx_Freeze 脚本,不妨假设其名为 setup.py,内容如下:
可见其基本遵照了 官方文档的示例 ,并去除了一些暂时用不到的语句。其中,build_exe_options 暂时留空,待第一次构建后根据可能的报错信息补充;原例中的 base 实际上默认就是 None,即命令行程序,除非需要构建图形界面程序,否则配置了反而是 画蛇添足 。现在可以打开命令行终端,在此目录下运行
由于 cx_Freeze 在编译时,实际上是将全部导入库都编译了一遍并放在子目录中供主程序调用,从而真正独立于 Python 环境。其自称能够自动分析哪些库需要包含。然而事实上对深入一定层次后的导入分析有瑕疵(例如 windows.py 引用了一个库,该库又引用了另一个库,则第三个库有可能分析不出)。遇到这种错误,绝大多数情况下可以手动在 setup.py 中指定额外包含的库,既可以在 build_exe_options 下的 'packages' 中指定库名,也可以在 build_exe_options 中新建一个键名为 'includes' 然后指定库名,形如:
这个过程有时要重复多次,直到添加完所有<del>届不到</del>不能自动检测到的库。据说也可以直接在 setup.py 中导入(import)库,未亲测。个别特例无效,请继续阅读。
【参考】
我改了一下
dictionary={} # 创建一个空字典# 定义一个函数,功能:向字典中增加记录
# dictionary 是字典,en 是英文单词,ch 是对应中文单词
def add_dict(dictionary, en, ch):
dictionary[en] = ch # 增添or 更新一条记录
dictionary[ch] = en
print("添加成功")
# 定义一个函数,功能:翻译
# dictionary 是字典,string 是要查找的单词(中文or 英文)
def find(dictionary, string):
if string not in dictionary: # 如果string 不在dict 内,打印提示信 息
print("该单词不在dict 内")
else: # 否则,给出对应中文释义
print("该单词", string, "的意思是:", dictionary[string])
# 向字典内增添几个记录,测试增加记录的功能,也可尝试用while 循环持续接收用户添加词条
for i in range(3):
en = input("增添的英文单词: ") # 接受输入
ch = input("对应的中文单词: ")
add_dict(dictionary, en, ch) # 调用add_dict 函数,往字典中添加内 容
# 接收用户输入,调用find 函数实现翻译
string = input("请输入要查询的单词: ")
find(dictionary, string)
运行效果:
增添的英文单词: apple对应的中文单词: 苹果
添加成功
增添的英文单词: banana
对应的中文单词: 香蕉
添加成功
增添的英文单词: peach
对应的中文单词: 桃子
添加成功
请输入要查询的单词: peach
该单词 peach 的意思是: 桃子
错误应该是你定义函数时的变量名(dictionary)和函数内部的变量名(dict)不一致导致的,还有你在测试add_dict的时候把add_dict的返回值None赋给了一个名叫dictionary的变量,这是完全没必要的,并且导致了和现有的dictionary的冲突,使得第二次循环添加单词时出现错误。