在网上,我们都会看见有些博主建议我们使用pyinstaller的-F与-w参数,前者是表示“打包一个.py文件”,而默认的是-D,意思是打包一个项目(文件夹);后者表示“打开.exe文件时不会弹出cmd窗口”。
但普遍没有说解释,导致新手动不动就出错报错,很犯难。
以下,是我实践之后的结论,以及解决措施:
1.如果你的.py源文件里,如果需要输出信息,也就是“print() 或 sys.stdout.write()”,那不能加-w参数,因为你需要向工作台输出信息,cmd就相当于工作台了,所以不能加(如果加了,会AttributeError: 'NoneType' object has no attribute 'write')。
2.当你使用-F参数时,也就是只打包一个.py源文件时,你在源文件里使用的exec("xxxx".read())这类打开文件读取并执行的操作也会报错,以及用上下文管理器打开文件(如.txt .dat .json .pkl)并读取数据这类牵扯到文件操作的都会受到影响。这时,必须把你保存数据的这些文件以原有形式移动到dist文件夹下,也就是移动到打包后.exe所在的文件夹下,这样程序就正常了。
所说的原有形式,就是“相对路径下的原分布,只不过.py源文件变成了.exe罢了”。
欢迎指正!