py2app:modulegraph缺少scan_code

Mic*_*hal 12 python macos py2app python-3.x

由于某些原因我无法解释或google,即使用最简单的例子,py2app也会崩溃.我使用python 3.4.1虚拟环境创建,Projects/Test/virtenv其中py2app通过pip安装.

这是输出$pip list:

altgraph (0.12)
macholib (1.7)
modulegraph (0.12)
pip (1.5.6)
py2app (0.9)
setuptools (3.6)
Run Code Online (Sandbox Code Playgroud)

foo.py是一个保存在Projects/Test /中的hello world示例文件,包含一行:

print('hello world')
Run Code Online (Sandbox Code Playgroud)

setup.py保存在Projects/Test中,生成者$py2applet --make-setup foo.py:

"""
This is a setup.py script generated by py2applet

Usage:
    python setup.py py2app
"""

from setuptools import setup

APP = ['foo.py']
DATA_FILES = []
OPTIONS = {'argv_emulation': True}

setup(
    app=APP,
    data_files=DATA_FILES,
    options={'py2app': OPTIONS},
    setup_requires=['py2app'],
)
Run Code Online (Sandbox Code Playgroud)

这是运行的完整输出$python setup.py py2app(所有pip和python命令都是在激活虚拟环境的情况下完成的):

running py2app
creating /Users/mik/Desktop/Projects/Test/build
creating /Users/mik/Desktop/Projects/Test/build/bdist.macosx-10.8-x86_64
creating /Users/mik/Desktop/Projects/Test/build/bdist.macosx-10.8-x86_64/python3.4-standalone
creating /Users/mik/Desktop/Projects/Test/build/bdist.macosx-10.8-x86_64/python3.4-standalone/app
creating /Users/mik/Desktop/Projects/Test/build/bdist.macosx-10.8-x86_64/python3.4-standalone/app/collect
creating /Users/mik/Desktop/Projects/Test/build/bdist.macosx-10.8-x86_64/python3.4-standalone/app/temp
creating /Users/mik/Desktop/Projects/Test/dist
creating build/bdist.macosx-10.8-x86_64/python3.4-standalone/app/lib-dynload
creating build/bdist.macosx-10.8-x86_64/python3.4-standalone/app/Frameworks
*** using recipe: lxml ***
*** using recipe: ftplib ***
*** using recipe: sip ***
*** using recipe: ctypes ***
*** using recipe: xml ***
*** using recipe: pydoc ***
Traceback (most recent call last):
  File "setup.py", line 18, in <module>
    setup_requires=['py2app'],
  File "/usr/local/Cellar/python3/3.4.1/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/core.py", line 148, in setup
    dist.run_commands()
  File "/usr/local/Cellar/python3/3.4.1/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/dist.py", line 955, in run_commands
    self.run_command(cmd)
  File "/usr/local/Cellar/python3/3.4.1/Frameworks/Python.framework/Versions/3.4/lib/python3.4/distutils/dist.py", line 974, in run_command
    cmd_obj.run()
  File "/Users/mik/Desktop/Projects/Test/virtenv/lib/python3.4/site-packages/py2app/build_app.py", line 659, in run
    self._run()
  File "/Users/mik/Desktop/Projects/Test/virtenv/lib/python3.4/site-packages/py2app/build_app.py", line 865, in _run
    self.run_normal()
  File "/Users/mik/Desktop/Projects/Test/virtenv/lib/python3.4/site-packages/py2app/build_app.py", line 943, in run_normal
    self.process_recipes(mf, filters, flatpackages, loader_files)
  File "/Users/mik/Desktop/Projects/Test/virtenv/lib/python3.4/site-packages/py2app/build_app.py", line 824, in process_recipes
    rval = check(self, mf)
  File "/Users/mik/Desktop/Projects/Test/virtenv/lib/python3.4/site-packages/py2app/recipes/virtualenv.py", line 80, in check
    mf.scan_code(co, m)
AttributeError: 'ModuleGraph' object has no attribute 'scan_code'
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下发生了什么以及如何解决它?

编辑:是modulegraph.py中scan_code的文档,但在Projects/Test/virtenv/lib/python3.4/site-packages/modulegraph/modulegraph.py中找到的文件包含一个名为_scan_code的函数,带有前导下划线.这种变化是否打破了py2app?

编辑:发布

编辑:从上述文件中的几个函数定义中手动删除前导下划线,允许py2app无错误地运行.对于发生的事情,我仍然感到困惑

小智 15

我和你有同样的问题,现在解决了.

我提到了这篇文章.

首先,搜索路径

$ /yourenv/lib/python2.7/site-packages/py2app/recipes/virtualenv.py
Run Code Online (Sandbox Code Playgroud)

接下来,打开此文件virtualenv.py,查找scan_codeload_module将其更改为_scan_code_load_module.

最后,尝试运行您的应用

  • 似乎已在 https://bitbucket.org/ronaldoussoren/py2app/commits/4d6629f430b9ddfbcd0c0bbb10c526d535bc2995 中修复 (2认同)