使用 python 3.6 + py2app:为什么会生成 pyc 文件?
Using python 3.6 + py2app: why are pyc files generated?
我写了一个 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'
我有以下问题:
我该如何解决这个问题?
在 "importlib/util.pyc" 中查找 find_spec 时似乎发生错误。我不明白为什么 py2app 使用 pyc 文件,因为我使用的是 Python 3.6。 Python 3.6 不再使用 pyc 文件了吧?发生这种情况是因为 py2app 出于某种原因使用 2.7 路径吗? (我也安装了 Python 2.7)
我无法使用 IDLE 3.6 打开 "importlib/util.pyc"(同样是因为据我了解 Python 3.6 不再支持 pyc 文件),但是当我打开它时使用 IDLE 2.7 我只得到一个 window 的白屏。我怎样才能成功打开这个文件以更好地理解错误?
提前致谢!
问题
- 我该如何解决这个问题?
Python 众所周知,包装商不愿回答这个问题。
- 在 "importlib/util.pyc" 中查找 find_spec 时似乎发生错误。
不太了解 python 3.6 和冻结工具,但我知道冻结工具通常需要一段时间才能赶上新的 python packaging/build 东西。 Python 3.6 很新。如果现在冻结对你来说很重要,而你无法获得 3.6,你可以考虑 python 3.5 或者 3.4 暂时。
- 如何才能成功打开 "importlib/util.pyc" 以更好地理解错误?
*.pyc
是 .py
的 compiled
版本。它可能不包含您可以检查以调试问题的任何内容。您的 python 发行版中应该有一个 importlib/util.py
可以检查。
- 我还可以尝试什么?
一些建议:
提出一个issue for py2app
试试其他冻结工具比如pyinstaller(目前还没有正式支持3.6)
我写了一个 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'
我有以下问题:
我该如何解决这个问题?
在 "importlib/util.pyc" 中查找 find_spec 时似乎发生错误。我不明白为什么 py2app 使用 pyc 文件,因为我使用的是 Python 3.6。 Python 3.6 不再使用 pyc 文件了吧?发生这种情况是因为 py2app 出于某种原因使用 2.7 路径吗? (我也安装了 Python 2.7)
我无法使用 IDLE 3.6 打开 "importlib/util.pyc"(同样是因为据我了解 Python 3.6 不再支持 pyc 文件),但是当我打开它时使用 IDLE 2.7 我只得到一个 window 的白屏。我怎样才能成功打开这个文件以更好地理解错误?
提前致谢!
问题
- 我该如何解决这个问题?
Python 众所周知,包装商不愿回答这个问题。
- 在 "importlib/util.pyc" 中查找 find_spec 时似乎发生错误。
不太了解 python 3.6 和冻结工具,但我知道冻结工具通常需要一段时间才能赶上新的 python packaging/build 东西。 Python 3.6 很新。如果现在冻结对你来说很重要,而你无法获得 3.6,你可以考虑 python 3.5 或者 3.4 暂时。
- 如何才能成功打开 "importlib/util.pyc" 以更好地理解错误?
*.pyc
是 .py
的 compiled
版本。它可能不包含您可以检查以调试问题的任何内容。您的 python 发行版中应该有一个 importlib/util.py
可以检查。
- 我还可以尝试什么?
一些建议:
提出一个issue for py2app
试试其他冻结工具比如pyinstaller(目前还没有正式支持3.6)