Как заставить Jython PythonPath надежно включать пути классов Java? - PullRequest
1 голос
/ 08 ноября 2010

Вопрос

Есть ли способ надежно убедиться, что оба пути исходного кода Python и скомпилированные пути классов Java добавлены в Jython PythonPath при выполнении модульных тестов в Eclipse?

Если нет, есть ли лучший обходной путь, чем добавление абсолютных путей в список PyDev PythonPath, внешние библиотеки?

Справочная информация

У меня возникла странная проблема с запуском модульных тестов Jython вкласс Jython, который наследуется от класса Java.

У нас есть приложение RCP Eclipse со структурой (упрощенной), подобной этой:

Config project (Pydev nature only)
    scripts
        src
            classes.py
        test
            classesTest.py

Core project (Both Java & Pydev natures)
    scripts
    src
        baseClass.java
    classes
        baseClass.java

Library project (Both Java & Pydev natues, but no Jython scripts)
    src
        interface.java
    classes
        interface.class

В classes.py Я импортирую baseClass,который реализует interface, определенный в interface.java.Затем я создаю класс Jython, который наследуется от baseClass.

. В моем classesTest.py я импортирую классы и определяю модульные тесты.

Проблемы возникают, когда я пытаюсь запустить модультесты с использованием "Project Explorer> classesTest.py> Run as> Jython unit-test":

  1. Иногда не удается найти baseClass (я думаю, что это не удается с ImportError, ноЯ не могу воспроизвести это прямо сейчас).
  2. В других случаях он находит baseClass, но затем не может найти interface, поэтому происходит сбой с java.lang.NoClassDefFoundError.

Если я pprint sys.path в начале тестового модуля, то я вижу, что:

  1. Пока core/scripts находится на пути Python, ни core/classes ни library/classes не находятся на пути.
  2. Оба core/scripts и core/classes находятся на пути питона, но library/classes все еще нет.

Иногда оченьредко пути обоих классов добавляются к пути python, и модульные тесты работают нормально, без обходного пути ниже.К сожалению, я не разработал, как воспроизвести это и не вижу разницы в файлах в дереве исходных кодов между тем, что оно работает, и оно не работает.

Текущий обходной путь

Мой текущий обходной путьявно добавить в «Внешние библиотеки» для library/classes и core/classes явно.К сожалению, похоже, что это должны быть абсолютные пути, что означает, что я должен устанавливать их по-разному для каждого транка, филиала или компьютера, которые я использую.Поэтому я не хочу вводить их в систему контроля версий, и каждый раз их приходится настраивать.

Примечания

Обратите внимание, что проект Config ссылается только на основной проект., но ссылка на библиотечный проект явно не имеет никакого значения для пути к классам.

Кроме того, пытаясь найти надежный метод для воспроизведения этой проблемы, я заставил другие библиотеки необъяснимым образом исчезнуть из пути к Python, а затем так же загадочноснова появляются, последний пример - Mock!

Обновление

Я не видел эту проблему в последнее время (в настоящее время использую Eclipse 3.7.1 и PyDev 2.2.2), так что это может быть аберрациейс комбинацией Eclipse / PyDev, которую я использовал в то время.

Ответы [ 2 ]

1 голос
/ 31 октября 2011

Для Java-проекта вы должны явно добавить папку с файлами .class в PYTHONPATH.

Рекомендованная организация будет:

java_project / bin <- эта папка должна быть установлена ​​как исходная папка в PyDev (для добавления в PYTHONPATH). java_project / src <- эта папка должна быть добавлена ​​в путь к классам jdt, но не должна содержать ссылки на PyDev </p>

python_project / src <- эта папка должна быть установлена ​​как исходная папка в PyDev (для добавления в PYTHONPATH). </p>

И python_project должен иметь ссылку на java_project.

См. Последнюю часть http://pydev.org/manual_101_project_conf2.html в качестве ссылки.

0 голосов
/ 15 августа 2013

У меня была похожая проблема.Недавно исправлено путем соответствующего изменения поля python.path в файле реестра Jython.

Похоже, что плагин Pydev не может изменить sys.path для возможности импорта модуля Python из проекта Java в Eclipse.

Подробнее Добавление в модуль Pythonв sys.path для проекта Java в pydev, Eclipse

...