py2app错误:在find_needed_modules中TypeError:'NoneType'对象没有属性'__getitem__'

ope*_*nsw 3 python macos macports py2app

我有一些py2app的麻烦; 出于某种原因,对于我开发的所有脚本,我始终存在相同的错误.目前我正在使用最新的MacPorts版本,经过两天的测试后,我无法弄清楚出了什么问题.

py2app的setup.py文件之一是:

from setuptools import setup

APP = ['main.py']
OPTIONS = {'argv_emulation': True, 'includes': ['sip', 'PyQt4._qt', 'PyQt4.QtCore', 'PyQt4.QtGui'],
    'excludes': ['PyQt4.QtDesigner', 'PyQt4.QtNetwork', 'PyQt4.QtOpenGL', 'PyQt4.QtScript', 'PyQt4.QtSql', 'PyQt4.QtTest', 'PyQt4.QtWebKit', 'PyQt4.QtXml', 'PyQt4.phonon']}

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

这是日志:

python setup.py py2app
running py2app
creating /Users/opensw/SkyDrive/SISSA/Kymograph/build/bdist.macosx-10.6-intel/python2.7-standalone/app
creating /Users/opensw/SkyDrive/SISSA/Kymograph/build/bdist.macosx-10.6-intel/python2.7-standalone/app/collect
creating /Users/opensw/SkyDrive/SISSA/Kymograph/build/bdist.macosx-10.6-intel/python2.7-standalone/app/temp
creating build/bdist.macosx-10.6-intel/python2.7-standalone/app/lib-dynload
creating build/bdist.macosx-10.6-intel/python2.7-standalone/app/Frameworks
*** using recipe: virtualenv ***
WARNING: ImportError in sip recipe ignored: No module named matplotlib-1
WARNING: ImportError in sip recipe ignored: No module named scipy-0
*** using recipe: sip ***
*** using recipe: matplotlib ***
*** using recipe: scipy ***
Traceback (most recent call last):
  File "setup.py", line 10, in <module>
    setup_requires=['py2app'],
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/core.py", line 152, in setup
    dist.run_commands()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 953, in run_commands
    self.run_command(cmd)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command
    cmd_obj.run()
  File "/Users/opensw/SkyDrive/SISSA/Kymograph/py2app-0.7.3-py2.7.egg/py2app/build_app.py", line 553, in run
    self._run()
  File "/Users/opensw/SkyDrive/SISSA/Kymograph/py2app-0.7.3-py2.7.egg/py2app/build_app.py", line 741, in _run
    self.run_normal()
  File "/Users/opensw/SkyDrive/SISSA/Kymograph/py2app-0.7.3-py2.7.egg/py2app/build_app.py", line 816, in run_normal
    self.process_recipes(mf, filters, flatpackages, loader_files)
  File "/Users/opensw/SkyDrive/SISSA/Kymograph/py2app-0.7.3-py2.7.egg/py2app/build_app.py", line 710, in process_recipes
    find_needed_modules(mf, packages=rval['packages'])
  File "build/bdist.macosx-10.6-intel/egg/modulegraph/find_modules.py", line 199, in find_needed_modules
TypeError: 'NoneType' object has no attribute '__getitem__'
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

the*_*oom 10

问题是一些错误的输入已经传递给算法,该算法试图检测依赖性以便将它们打包到你的应用程序中 - 我遇到麻烦的地方之一就是在README包中使用了github风味的降价. md文件.

这是调试setup.py问题的一般指南,或者实际上是python问题.

  1. 以交互模式再次运行,即python -i setup.py py2app.一旦setup.py退出,您将发现自己处于python提示符中.

  2. from pdb import pm; pm().您现在应该发现自己处于调试提示状态.

  3. 类型up和回车-你现在在堆栈帧更高-可以键入list到看到在源代码中的当前帧的位置,并args看到传递到当前帧(通常是一个函数或方法)中的参数.您还可以运行python命令来检查当前状态,并运行pp var漂亮打印该变量.

  4. 一旦你重复了上面的步骤几次,你会发现遇到错误的地方 - 在我遇到它是README文件的情况下,我发现了一个变量lineno,它给出了我的README文件的行,导致了错误.如果您的问题是模块导入,它可能会有所不同,但我的直觉是您会发现自己循环遍历packages堆栈跟踪中看到的参数,并且当前列表项将是您问题的关键.