Работа со средой Virtualenv, настроенной в IDEA Python SDK - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть проект Java, который я хочу экспортировать как банку.Проблема в том, что я вызываю несколько скриптов Python внутри программы, и для этих скриптов требуется установить несколько пакетов Python.Мой вызов скрипта python выглядит следующим образом:

root = Paths.get(".").toAbsolutePath().normalize().toString();
cmd = "python " + root + "/my_script.py"
Runtime.getRuntime().exec(cmd)

И когда я запускаю jar, это работает нормально, если у меня есть скрипты Python на месте и все пакеты Python (плюс сам Python) установлены намой компьютер (глобально).

Что я хотел бы сделать, так это собрать все эти элементы Python в мою флягу, чтобы я мог запустить приложение на любой машине (единственное требование - Java 8 - нетPython или любой из его пакетов).Я обнаружил, что virtualenv - это именно то, что будет делать эту работу здесь.

Поскольку я работаю в IDEA, я решил настроить virtualenv для SDK и поэтому создал среду Virtualenv следующим образом. этот урок .Добавил нужные мне пакеты в настройки среды, поместил my_script.py в директорию scripts.В итоге получилась такая структура:

/
├── src
│   └── main.java
│   └── sample.fxml
└── venv
    ├── include
    │   
    ├── scripts [a bunch of default scripts here + my_script.py]
    └── lib  
          └── site-packages [a bunch of libraries here including the ones I require]   
          └── tcl8.6      

Я должен сказать, что учебник Jetbrain действительно нуждается в продолжении, так как я абсолютно потерян.Я просто не знаю, как ссылаться на my_script.py, чтобы он использовал пакеты из venv, а не глобальные.

Буду очень признателен за вашу помощь или подсказки!

Ответы [ 2 ]

0 голосов
/ 30 марта 2019

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

Если вы действительно этого не делаетеЕсли вы не хотите зависеть от установленного Python, вы можете использовать Jython .Он запускает код Python на JVM.Тем не менее, он поддерживает только Python 2.7.Поддержка Python 3 работает на , но медленно.

Ничего из этого не будет легким, если у вас много зависимостей пакетов.

0 голосов
/ 03 февраля 2019

По моему мнению, venv не будет вашим окончательным решением: если вам нужно использовать свой java-код на разных хостах (Windows, Linux, MACOS), вам следует перекомпилировать venv для каждой отдельной машины, и это не ваш случай.Может быть, решением было бы «заморозить» код Python.У меня есть много интересных статей о заморозке кода в Python, я предпочитаю python-guide .

Итак, более легкая заморозка кода, вы можете запустить код Python из Java, как исполняемый файл, и выможет предоставлять разные исполняемые файлы в зависимости от ОС.

...