【问题标题】:Using python 3.6 + py2app: why are pyc files generated?使用python 3.6 + py2app:为什么会生成pyc文件?
【发布时间】:2017-05-21 05:12:39
【问题描述】:

我编写了一个 GUI,我想用 py2app 将它变成一个独立的 OS X 应用程序。 Py2app 使用以下命令成功生成了一个独立的 OS X 包:

$ py2applet --make-setup superGui.py
$ python3 setup.py py2app

我的 setup.py 看起来像这样:

from setuptools import setup

APP = ['/Users/username/PycharmProjects/gui/superGui.py']
DATA_FILES = []
OPTIONS = {'argv_emulation': True,
    'plist': {'LSUIElement': True,},
    'includes':['rumps'],}

setup(
    app=APP,
    data_files=DATA_FILES,
    options={'py2app': OPTIONS},
    setup_requires=['py2app'],
)

我添加了基于this documentation 的臀部包和 LSUIElement。不管有没有它们,我都有同样的错误。

但是,当我尝试使用以下方式运行应用程序时:

$ open dist/superGui.app

我在日志中收到以下错误消息:

06/01/17 12:42:51,321 superGui[55597]:   File "<frozen importlib._bootstrap>", line 961, in _find_and_load
06/01/17 12:42:51,322 superGui[55597]:   File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
06/01/17 12:42:51,322 superGui[55597]:   File "<frozen importlib._bootstrap>", line 646, in _load_unlocked
06/01/17 12:42:51,322 superGui[55597]:   File "<frozen importlib._bootstrap>", line 616, in _load_backward_compatible
06/01/17 12:42:51,322 superGui[55597]:   File "scrapy/__init__.pyc", line 10, in <module>
06/01/17 12:42:51,322 superGui[55597]:   File "pkgutil.pyc", line 616, in get_data
06/01/17 12:42:51,322 superGui[55597]:   File "importlib/util.pyc", line 83, in find_spec
06/01/17 12:42:51,322 superGui[55597]: AttributeError: 'NoneType' object has no attribute 'startswith'

我有以下问题:

  1. 如何解决此问题?

  2. 在“importlib/util.pyc”中查找 find_spec 时似乎发生了错误。我不明白为什么 py2app 使用 pyc 文件,因为我使用的是 Python 3.6。 Python 3.6 不再使用 pyc 文件了,对吧?发生这种情况是因为 py2app 出于某种原因使用 2.7 路径吗? (我也安装了 Python 2.7)

  3. 我无法使用 IDLE 3.6 打开“importlib/util.pyc”(再次,因为据我了解 Python 3.6 不再支持 pyc 文件),但是当我使用 IDLE 2.7 打开它时,我得到了一个带有白色屏幕的窗口。如何成功打开此文件以更好地理解错误?

提前致谢!

【问题讨论】:

    标签: python macos python-3.x runtime-error py2app


    【解决方案1】:

    问题

    1. 如何解决此问题?

    众所周知,Python 打包者拒绝回答这个问题。

    1. 在“importlib/util.pyc”中查找 find_spec 时似乎出现了错误。

    对 python 3.6 和冻结工具了解不多,但我知道冻结工具通常需要一段时间才能赶上新的 python 打包/构建内容。 Python 3.6 是相当新的。如果现在冻结对您很重要,并且您无法继续使用 3.6,您可能会考虑暂时使用 python 3.5 或 3.4。

    1. 如何成功打开“importlib/util.pyc”以更好地理解错误?

    *.pyccompiled.py 版本。它可能不包含您可以检查以调试问题的任何内容。在你的 python 发行版中应该有一个 importlib/util.py 可以检查。

    1. 我还能尝试什么?

    几个建议:

    1. 提出issue for py2app

    2. 尝试其他冻结工具,例如pyinstaller(尚未正式支持 3.6)

    【讨论】:

    • 嗨,不幸的是,降到 3.4 并没有帮助。我也会尝试 3.3(不能再低了,因为 py2app 只支持 python2 和 python3.3+)。不幸的是,没有 importlib/util.py 文件。我不得不说我对 python 有点失望。几乎不支持创建独立应用程序。 :(
    • 独立应用程序绝对是一个弱点,因为当它们不起作用时,找出原因可能非常具有挑战性。然而,语言本身以及围绕它的库基础架构使其成为许多编程领域非常高效的环境。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 2018-08-23
    • 2012-11-02
    • 2014-06-14
    • 2023-01-18
    • 1970-01-01
    相关资源
    最近更新 更多