#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 , который переносим на любую машину, имеющую правильную версию интерпретатора