Работа со средой Virtualenv, настроенной в IDEA Python SDK
У меня есть проект 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 в свой jar-файл, чтобы я мог запустить приложение на любом компьютере (единственное требование - 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, а не глобальные.
Буду очень признателен за вашу помощь или намеки здесь!
1 ответ
По моему мнению, venv не будет вашим окончательным решением: если вам нужно использовать свой java-код на разных хостах ( Windows, Linux, MACOS), вам следует перекомпилировать venv для каждой отдельной машины, и это не ваш случай. Может быть, решением было бы "заморозить" код Python. Есть много интересных статей о заморозке кода в Python, я предпочитаю Python-руководство.
Таким образом, при более быстром замораживании кода вы можете запускать код Python из Java, как исполняемый файл, и можете предоставлять различные исполняемые файлы в зависимости от ОС.
Виртуальная среда по-прежнему требует установки Python, она просто позволяет вам выбрать, какой из установленных интерпретаторов Python использовать, и позволяет вам установить набор пакетов.
Если вы действительно не хотите зависеть от установленного Python, вы можете использовать Jython. Он запускает код Python на JVM. Однако он поддерживает только Python 2.7. Поддержка Python 3 в настоящее время работает на, но медленно.
Ничего из этого не будет простым, если у вас много зависимостей пакетов.