GraalVM: Как импортировать библиотеки с разных языков в одном проекте? Я использую IntelliJ

#intellij-idea #graalvm #polyglot

Вопрос:

Я должен создать некоторые функции, которые будут использовать разные языки (python, R, js).

Я застрял в части генерации случайных чисел в Python для инициализации списка случайными элементами. Я посмотрел на способы инициализации случайных списков, а затем решил их использовать result = polyglot.eval("python", "[random.randint(0,10) for i in range(20)];") .

Проблема, с которой я сталкиваюсь сейчас, заключается в том, что мне нужно импортировать «случайную» библиотеку из python или любые другие библиотеки, которые мне понадобятся, с разных языков. Я слышал, что это может быть проблемой с зависимостями, но я не уверен…

Что мне теперь делать? Возможно ли вообще импортировать библиотеки с нескольких языков в одном проекте? Какие еще у меня есть альтернативы?

Ответ №1:

Обратите внимание, что решение для разных динамических языков может отличаться.

Также компонент js стабилен, в то время как python (по состоянию на 2021 год) все еще является экспериментальным.

Вот пример для Python с модулями https://github.com/paulvi/java-python-graalvm-template

И если вы действительно занимаетесь полиглотом (используя объект Python в коде Java), см. https://github.com/hpi-swa-lab/graalpython-java-example

Все еще остается вопрос о том, как на самом деле развернуть это в производстве https://github.com/hpi-swa-lab/graalpython-java-example/issues/6 как только вложенная папка venv будет упакована в банку, это просто сработает. Одно из решений находится в ttps://github.com/paulvi/java-python-graalvm-шаблон

Также randon, т. е. любая библиотека с graalvm по-прежнему является большой проблемой, так как разные пакеты имеют разные проблемы, см. https://github.com/oracle/graalpython/issues/228

Я предлагаю, прежде чем действительно смешивать множество языков, просто попробовать один, например, более стабильный js, заставить его работать, а затем попробовать следующий.

Кстати, PyCharm пока не поддерживает graalpython .

Если вы сделаете что-либо с открытым исходным кодом или позже найдете что-то новое, пожалуйста, дайте мне знать через GitHub.

Комментарии:

1. Понял! Правильный способ, которым я должен был написать свою строку, следующий: результат = полиглот.eval(«python», «импорт случайным образом; [random.randint(0,10) для i в диапазоне(20)];») Спасибо, что поделились своими знаниями, это помогло мне!