Байт-код Python против Java

#python #pyinstaller #bytecode #platform-independent

Вопрос:

Я хочу, чтобы мои приложения с графическим интерфейсом python запускались на всех трех операционных системах без необходимости перекомпиляции на каждой платформе. Является ли исполняемый файл python, созданный pyinstaller (или аналогичной утилитой), независимым от платформы, как байт-код Java? Байт-код Java работает в Windows, Mac и Linux с использованием JRE.

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

1. Байт-код Python выполняется на виртуальной машине, да. Но это на самом деле не имеет отношения к тому, создает ли pyinstaller прибыльный исполняемый файл

2. Вам не нужно помечать это [java] . На самом деле вы ничего не спрашиваете о Java, и ваши вопросы и ответы не помогут кому-то, кто спрашивает о темах Java.

3. Обратите внимание, что если вы объедините Java-приложение JVM в файл .exe (или эквиваленты других платформ), это также будет зависеть от платформы. У вас может быть либо кроссплатформенный пакет, требующий установки виртуальной машины/интерпретатора в системе пользователя; либо вы можете иметь автономный исполняемый файл без зависимостей, который работает на определенной платформе. У вас не может быть кроссплатформенного исполняемого файла без зависимостей (ну, это есть, но это все еще зависит от x64 и, вероятно, не подходит для Python или Java).

Ответ №1:

Это прямо там, в документации

Вывод PyInstaller зависит от активной операционной системы и активной версии Python. Это означает, что для подготовки дистрибутива к:

  • другая ОС
  • другая версия Python
  • 32-разрядная или 64-разрядная ОС

вы запускаете PyInstaller в этой операционной системе под этой версией Python. Интерпретатор Python, который выполняет PyInstaller, является частью пакета, и он зависит от операционной системы и размера слова.

Другими словами: нет, это не портативно. Вам нужно скомпилировать для каждой платформы/архитектуры.

Как заявил @juanpa.arrivillaga в комментариях, это не имеет ничего общего с байт-кодом, который обычно выполняет python. Это портативно. Проблема здесь в том, что PyInstaller связывает интерпретатор python, зависящий от операционной системы и архитектуры (то есть это не работает по той же причине, по которой вы обычно не могли бы запускать исполняемый файл Windows на macOS).

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

1. Важно отметить, что это не имеет ничего общего с байт-кодом Python , который переносим на любую машину, имеющую правильную версию интерпретатора