使用python 3.6 + py2app:为什么生成pyc文件?

时间:2017-01-06 12:26:03

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

我已经编写了一个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添加了rumps包和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打开它时,我只是得到了一个带白色屏幕的窗口。如何成功打开此文件以更好地理解错误?

  4. 提前致谢!

1 个答案:

答案 0 :(得分:1)

<强>问题

  1. 如何解决此问题?
  2. 众所周知,Python打包者对这个问题的答案很有抵触力。

    1. 在&#34; importlib / util.pyc&#34;中查找find_spec时似乎发生错误。
    2. 不太了解python 3.6和冻结工具,但我知道冻结工具通常需要一段时间来赶上新的python包装/构建内容。 Python 3.6很新。如果冻结对你来说很重要,而你无法获得3.6,那么暂时你可以考虑使用python 3.5或3.4。

      1. 我如何打开&#34; importlib / util.pyc&#34;成功地更好地理解了错误?
      2. *.pyccompiled的{​​{1}}版本。它可能不会包含您可以检查以调试问题的任何内容。你的python发行版中应该有.py可以检查。

        1. 我还能尝试什么?
        2. 一些建议:

          1. 提出issue for py2app

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