我一个python应用,在本电脑上调试一切正常,然后打包成了exe,在本电脑上运行exe程序也是一切正常。然后复制到别的电脑上之后运行就发生错误,部分提示信息如下:
Exception in Tkinter callback
Traceback (most recent call last):
File “C:\Users\ADMINI~1\AppData\Local\Temp\ONEFIL~1\tkinter__init__.py”, line 1921, in call
File “C:\Users\ADMINI~1\AppData\Local\Temp\ONEFIL~1\start.py”, line 137, in on_generate_clicked
File “C:\Users\ADMINI~1\AppData\Local\Temp\ONEFIL~1\subprocess.py”, line 503, in run
File “C:\Users\ADMINI~1\AppData\Local\Temp\ONEFIL~1\subprocess.py”, line 971, in init
File “C:\Users\ADMINI~1\AppData\Local\Temp\ONEFIL~1\subprocess.py”, line 1456, in _execute_child
FileNotFoundError: [WinError 2] 系统找不到指定的文件。
报错问题就是找不到文件,后来发现是执行cmd命令的python.exe程序找不到了。代码里通过调用python.exe 来执行模块的cmd命令,但是打包成单exe文件之后没有复制原来的python解释器目录,就报找不到文件的错误,所以还得把原来安装python的目录一并复制打包才行。
但是打包exe程序就是为了精简,要是再把python目录一并打包发送的话,那就多此一举了。所以这里我们不通过调用python.exe执行cmd命令执行相关功能的方法,我们直接导入功能模块,通过调用模块main函数执行cmd命令,如:
sys.argv = command
main()
command为你想要执行的cmd命令内容,main()为你想要调用的模块的main()函数。这样的话再打包应用执行功能的时候就不再需要调用python.exe了,就省了复制多余的文件了。