Использование импорта pyobjc в PyDev в Eclipse в Mac OS X - PullRequest
0 голосов
/ 08 марта 2011

Я установил и настроил PyDev версии 1.6.5.2011020317 внутри Eclipse, работающей в Mac OS X 10.6.6:

Версия: Helios Service Release 1 Идентификатор сборки: 20100917-0705

Я использовал 'Auto Config' для настройки моего интерпретатора Python: он правильно нашел /usr/bin/python (это версия Python 2.6.1) и добавил различные системные папки в PYTHONPATH, включая /System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/PyObjC. Теперь этот путь является правильным путем к модулю Foundation в OS X, как показано интерпретатором командной строки:

$ 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']

Так почему же PyDev жалуется на «неопределенную переменную из импорта: NSDictionary» для этого класса:

import Foundation

class MyClass(object):

    def __init__(self, projectPath):
        '''
        Constructor
        '''
        self.projectDict = Foundation.NSDictionary.dictionaryWithContentsOfFile_(projectPath)

когда я смогу без проблем использовать этот класс из интерпретатора командной строки?

Обновление : ОК, я выяснил почему жалуется, а именно: модуль Foundation использует ScriptingBridge для динамического генерирования классов - предположительно pydev фактически не импортирует модуль, чтобы увидеть, какие классы внутри, он просто ищет .py[c] файлы. Поэтому позвольте мне задать вопрос не «почему это происходит», а «что мне сделать, чтобы это исправить»?

1 Ответ

3 голосов
/ 15 марта 2011

Почему это происходит? : PyDev не поддерживает синтаксический анализ метаданных моста сценариев PyObjC и, следовательно, не имеет способа самоанализ / извлечение символов для многих классов PyObjC.

Что нужно сделать, чтобы исправить это : В исходном коде PyDev есть несколько скриптов Python, которые обрабатывают обнаружение этих метаданных.Сценарии выполняются Eclipse с использованием настроенного интерпретатора, и они возвращают строки, которые используются для настройки интерпретатора, заполнения списков выполненных работ, показа советов по использованию и т. Д.

Сценарии, которые соответствуют вашим потребностям:

  • interpreterInfo.py - вызывается для получения списка каталогов и других импортов верхнего уровня по умолчанию для данного интерпретатора.
  • importTipper.py - генерирует советы по использованию для данного символа.
  • pycompletion.py - генерирует список завершений для данного символа.

Примеры вызововк приведенным выше сценариям с использованием системного интерпретатора:

% /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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...