#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)];») Спасибо, что поделились своими знаниями, это помогло мне!