使用 Py2app 时出现导入错误

Posted

技术标签:

【中文标题】使用 Py2app 时出现导入错误【英文标题】:An import error when using Py2app 【发布时间】:2018-07-23 03:33:00 【问题描述】:

我正在使用 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】:

这是一个临时修复,直到本月晚些时候发布新更新。

找到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

为上面的大部分代码贡献了this guy。

这个问题的原因是因为Plist在python3.7中被贬值了。 See python docs

【讨论】:

非常感谢!一年过去了,上游还没有解决这个问题?

以上是关于使用 Py2app 时出现导入错误的主要内容,如果未能解决你的问题,请参考以下文章

尝试运行 jupyter notebook 时出现导入错误

访问导入时出现 SSIS 错误

导入 tensorflow as tf 时出现导入错误

使用colab导入tensorrt时出现错误如何解决

IDE 在导入 mongodb 存储库时出现错误

导入大 sql 转储时出现 PHPMYADMIN 错误