Python 使用Py2app时出现导入错误

Python 使用Py2app时出现导入错误,python,py2app,Python,Py2app,我正在使用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

我正在使用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)
回溯(最近一次呼叫最后一次):
文件“/Library/Frameworks/Python.framework/Versions/3.7/bin/py2applet”,第7行,在
从py2app.script_py2applet导入main
文件“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site packages/py2app/script_py2applet.py”,第13行,在
从plistlib导入Plist
ImportError:无法从“plistlib”导入名称“Plist”(/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/plistlib.py)

我试图通过谷歌搜索这种错误,发现没有人问过和我一样的问题。我自己的设置有错误吗?

在本月晚些时候发布新更新之前,这是一个临时修复

查找
py2app
目录的路径,因为您需要更改该目录中几个文件中的一些代码行

如果您有终端,您可以通过以下方式找到目录:

find ~/ -type f -name “*py2app*”
py2applet --make-setup my_project.py
文件1

py2app/build_app.py (第614行)

替换:

if isinstance(self.plist, plistlib.Dict):

    self.plist = dict(self.plist.__dict__)

else:

  self.plist = dict(self.plist)
from plistlib import Plist
以下是:

if not isinstance(self.plist, dict):

    self.plist = dict(self.plist)
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)
import plistlib
plist = plistlib.fromFile(fn)
文件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)
以下是:

if not isinstance(self.plist, dict):

    self.plist = dict(self.plist)
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)
import plistlib
plist = plistlib.fromFile(fn)
文件3

py2app/script_py2applet.py (第13行)

替换:

if isinstance(self.plist, plistlib.Dict):

    self.plist = dict(self.plist.__dict__)

else:

  self.plist = dict(self.plist)
from plistlib import Plist
以下是:

if not isinstance(self.plist, dict):

    self.plist = dict(self.plist)
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)
import plistlib
plist = plistlib.fromFile(fn)
同时,更换(第115行)

以下是:

if not isinstance(self.plist, dict):

    self.plist = dict(self.plist)
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)
import plistlib
plist = plistlib.fromFile(fn)
然后,您最终可以使用以下命令在应用程序目录中创建setup.py文件:

find ~/ -type f -name “*py2app*”
py2applet --make-setup my_project.py
并使用以下内容构建独立应用程序:

python setup.py py2app -A
对上面大部分代码的贡献


出现此问题的原因是python3.7中对Plist进行了折旧

非常感谢!一年过去了,这在上游还没有固定下来?