这只是一个临时补丁,直到本月稍后发布新更新。
查找py2app
目录的路径,因为您需要更改该目录中几个文件中的一些代码行。
如果您有终端,则可以使用以下命令找到该目录:
find ~/ -type f -name “*py2app*”
文件1
py2app/build_app.py(第614行)
替换为:
if isinstance(self.plist, plistlib.Dict):
self.plist = dict(self.plist.__dict__)
else:
self.plist = dict(self.plist)
以下是相关内容:
if not isinstance(self.plist, dict):
self.plist = dict(self.plist)
文件 2
py2app/create_appbundle.py
(第 26 行)
替换为:
dirs = [contents, resources, platdir]
plist = plistlib.Plist()
plist.update(kw)
plistPath = os.path.join(contents, 'Info.plist')
if os.path.exists(plistPath):
if plist != plistlib.Plist.fromFile(plistPath):
for d in dirs:
shutil.rmtree(d, ignore_errors=True)
for d in dirs:
makedirs(d)
plist.write(plistPath)
以下是相关内容:
dirs = [contents, resources, platdir]
plistPath = os.path.join(contents, 'Info.plist')
if os.path.exists(plistPath):
for d in dirs:
shutil.rmtree(d, ignore_errors=True)
for d in dirs:
makedirs(d)
plistlib.writePlist(kw, plistPath)
文件 3
py2app/script_py2applet.py
(第13行)
替换为:
from plistlib import Plist
以下是相关内容:
import plistlib
此外,请替换(第115行)
plist = Plist.fromFile(fn)
以下是相关内容:
plist = plistlib.fromFile(fn)
然后你可以在应用程序目录中使用以下命令创建setup.py文件:
py2applet --make-setup my_project.py
使用以下命令构建独立应用程序:
python setup.py py2app -A
感谢
这位大佬提供了上述代码的大部分。本问题的原因是Plist在python3.7中已被弃用。
详见Python文档。