使用Py2app时出现导入错误

3

我正在使用py2app将我的Python脚本打包成Mac上的.app文档,但是发现了一个导入错误:

Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.7/bin/py2applet", line 7, in <module>
from py2app.script_py2applet import main
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/py2app/script_py2applet.py", line 13, in <module>
from plistlib import Plist
ImportError: cannot import name 'Plist' from 'plistlib' (/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/plistlib.py)

我尝试通过谷歌搜索类似错误,但没有发现有人问过与我相同的问题。这是我的设置存在问题吗?

1个回答

6

这只是一个临时补丁,直到本月稍后发布新更新。

查找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文档

非常感谢!一年过去了,这仍然没有在上游修复吗? - kakyo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接