Jython и python модули - PullRequest
       188

Jython и python модули

20 голосов
/ 23 января 2009

Я только начал использовать PythonInterpreter в своих классах Java, и это прекрасно работает! Однако, если я пытаюсь включить модули Python (re, HTMLParser и т. Д.), Я получаю следующее исключение (для re):

Exception in thread "main" Traceback (innermost last):
  File "", line 1, in ?
ImportError: no module named re

Как сделать так, чтобы классы из jython jar "увидели" модули, доступные в python?

Ответы [ 4 ]

18 голосов
/ 27 января 2009

Вы встраиваете jython и будете использовать некоторые Python-модули, например:

, если вы хотите установить путь (sys.path) в вашем Java-коде:

public void init() {
        interp = new PythonInterpreter(null, new PySystemState());

        PySystemState sys = Py.getSystemState();
        sys.path.append(new PyString(rootPath));
        sys.path.append(new PyString(modulesDir));
    }

Py находится в org.python.core.

rootPath и modulesDir - это то, где ВЫ хотите!

пусть rootPath указывает, где вы расположили стандартную jython-lib

Взгляните на src / org / python / util / PyServlet.java в Jython-Source-Code, например

7 голосов
/ 23 января 2009

Согласно FAQ :

4.1 Какие части библиотеки Python поддерживаются?

Хорошей новостью является то, что Jython теперь поддерживает подавляющее большинство стандартной библиотеки Python. Плохая новость заключается в том, что это продвигается так быстро, что трудно обновлять документацию.

Встроенные модули (например, написанные на C для CPython) - это отдельная история. Они должны быть перенесены на Java или реализованы с помощью моста JNI для использования в Jython. Некоторые встроенные модули были портированы на JPython, в особенности cStringIO, cPickle, struct и binascii. Маловероятно, что модули JNI будут включены в собственно Jython.

Если вы хотите использовать стандартный модуль Python, просто попробуйте импортировать его. Если это работает, вы, вероятно, все готово. Вы также можете выполнить команду dir () для модулей, чтобы проверить список реализуемых им функций.

Если есть какой-то стандартный модуль Python, в котором вы действительно нуждаетесь, который еще не работает с Jython, отправьте нам письмо.

Другими словами, вы можете напрямую использовать модули Python из Jython, если только вы не пытаетесь использовать встроенные модули, и в этом случае вы застреваете с тем, что было перенесено в Jython.

1 голос
/ 23 января 2009

Проверьте ваш jython sys.path. Убедитесь, что библиотека, которую вы хотите загрузить, находится по этому пути. Посмотрите на jython faq для более подробной информации.

0 голосов
/ 26 ноября 2015

Вы можете обратиться сюда для решения Импорт модулей Python в jython

Скачать ez_setup.py отсюда http://peak.telecommunity.com/dist/ez_setup.py

Затем запустите jython ez_setup.py <any module name>.

Запускать его по любому пути к папке не имеет значения.

Я мог бы установить с ним pymysql, без проблем.

...