在Mac OS X上的Eclipse中的PyDev中使用pyobjc导入

时间:2011-03-08 15:38:19

标签: python eclipse macos pydev pyobjc

我在Eclipse中安装并配置了PyDev版本1.6.5.2011020317,在Mac OS X 10.6.6上运行:

  

版本:Helios Service Release 1   构建ID:20100917-0705

我使用'Auto Config'来设置我的Python解释器:它正确找到/usr/bin/python(Python版本2.6.1)并将各种系统文件夹添加到PYTHONPATH,包括{{1 }}。现在路径是OS X中/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/PyObjC模块的正确路径,如命令行解释器所示:

Foundation

那么为什么PyDev在这个类上抱怨“导入的未定义变量:NSDictionary”:

$ python
Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import Foundation
>>> Foundation.__path__
['/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/PyObjC/Foundation']

当我可以使用该类而没有来自命令行解释器的任何问题?

更新:好的,我发现为什么它会抱怨,这是import Foundation class MyClass(object): def __init__(self, projectPath): ''' Constructor ''' self.projectDict = Foundation.NSDictionary.dictionaryWithContentsOfFile_(projectPath) 模块正在使用ScriptingBridge动态生成类 - 大概是pydev isn实际上导入模块以查看内部的类,它只是在寻找Foundation个文件。所以,让我的问题不是“为什么会发生这种情况”,而是“我该怎么做才能解决它”?

1 个答案:

答案 0 :(得分:3)

为什么会发生这种情况?:PyDev不支持解析PyObjC脚本桥元数据,因此无法为许多PyObjC类内省/提取符号。

如何解决此问题:在PyDev source code中,有几个Python脚本可以处理此元数据的发现。这些脚本由Eclipse使用配置的解释器执行,它们返回用于配置解释器,填写完成列表,显示使用技巧等的字符串。

与您的需求相关的脚本是:

使用系统解释器调用上述脚本的示例:

% /usr/bin/python interpreterInfo.py | grep PyObjC
|/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/PyObjCINS_PATH

为模块生成完成:

>>> import pycompletion
>>> print pycompletion.GetImports('os')
@@COMPLETIONS(/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/os.py,(EX_CANTCREAT, 3),(EX_CONFIG, 3),(EX_DATAERR, 3), ....

似乎可以创建一个简单的macobjc.py库,其中包含检测和读取PyObjC.bridgesupport文件的例程。可以修改PyDev脚本以调用此库,以便返回这些类的有效完成列表。您需要将Eclipse指向PyDev源的本地副本,以便针对这些文件开发和测试补丁。一旦完成,您可以将其发送到上游;我不得不相信PyDev人会接受一个写得很好的补丁来支持PyObjC完成。