Упаковка скрипта Python в Linux в исполняемый файл Windows

У меня есть сценарий Python, который я хотел бы скомпилировать в исполняемый файл Windows. Теперь py2exe отлично работает в Windows, но я бы хотел иметь возможность запускать это в Linux. У меня действительно установлена ​​Windows на моем компьютере для разработки, но Linux - моя основная платформа для разработки, и мне уже надоело перезагружаться в Windows только для того, чтобы создать .exe. Я также не хочу покупать вторую лицензию Windows для работы на виртуальной машине, такой как VirtualBox. Любые идеи?

PS: Я знаю, что py2exe не столько компилирует файл python, сколько упаковывает ваш скрипт с интерпретатором Python. Но в любом случае в результате вам не потребуется установленный Python для запуска сценария.


person Chinmay Kanchi    schedule 01.06.2010    source источник
comment
Когда мне нужно что-то только для Windows (например, IE или тестирование пакетов установки NSIS), я использую виртуальную машину с Windows; Virtualbox отлично работает, перезагрузка не требуется. Конечно, это просто обходной путь.   -  person Piskvor left the building    schedule 01.06.2010
comment
А, но технически для этого вам потребуются две лицензии Windows ...   -  person Chinmay Kanchi    schedule 01.06.2010
comment
Я? Как же так? В моем случае ОС хоста - это не Windows, а только гость.   -  person Piskvor left the building    schedule 23.02.2012
comment
@Piskvor Чтобы не требовать двух лицензий, одной для «голого железа» и одной для VirtualBox, запрашивающий должен сначала удалить Windows с «голого железа» и установить ее в VirtualBox. Я не уверен, позволяет ли это OEM-лицензия.   -  person Damian Yerrick    schedule 24.08.2017
comment
Откуда появилось требование лицензии OEM? Я не вижу упоминания в вопросе; не предполагайте слишком многого.   -  person Piskvor left the building    schedule 24.08.2017


Ответы (5)


Вы смотрели PyInstaller?

Похоже, что версии до 1.4 поддерживают кросс-компиляцию (поддержка была удалена в 1.5+). См. этот ответ, чтобы узнать, как это сделать с PyInstaller 1.5+ в разделе Wine.

В документации говорится:

Добавить поддержку кросс-компиляции: PyInstaller теперь может создавать исполняемые файлы Windows при работе под Linux. Смотрите документацию для более подробной информации.

Сам не пробовал.

Я надеюсь, что это помогает

person luc    schedule 01.06.2010
comment
Да, это работает: groups.google.com/group/pyinstaller/browse_thread/thread / - person stephan; 01.06.2010
comment
Аааааааааааааааааааа! Это должно работать, но эта чертова штука поддерживает только python 2.6 на * NIX, а моему скрипту для работы требуется python 2.6 ... Похоже, больше усилий, чем того стоит ... Думаю, мне просто нужно спланировать мои циклы сборки, поэтому я перезагружаюсь в Windows только минимальное количество раз ... - person Chinmay Kanchi; 01.06.2010
comment
@Chinmay: была ветка pywin26 pyinstaller, которая была объединена в ствол. Итак, если вы смелый человек, вы можете проверить транк, используя svn co http://svn.pyinstaller.org/trunk pyinstaller-trunk, и он должен работать с 2.6 в Windows. - person stephan; 02.06.2010
comment
Я попробую. Непосредственная проблема была решена перезагрузкой в ​​Windows, но эта , вероятно, будет довольно часто возникать сейчас, когда я почти полностью перешел на Linux. Спасибо за предупреждение! - person Chinmay Kanchi; 03.06.2010
comment
эта функция удаляется: groups.google.com/forum/?fromgroups#!searchin/PyInstaller/ - person hoju; 23.02.2012
comment
ТАК испортил предыдущую ссылку. Во всяком случае в этой ветке автор говорит, что это я реализовал эту функцию некоторое время назад. И собираюсь в ближайшее время убрать, так как на половину работает. - person hoju; 23.02.2012
comment
Для будущих посетителей вот рабочая ссылка: groups.google.com/forum /? fromgroups #! topic / pyinstaller / - person TheLQ; 19.07.2013
comment
Кажется, некоторые пользователи смогли успешно скомпилировать Windows exe в Linux с помощью pyInstaller под Wine. Вы можете попробовать. - person gaborous; 08.08.2013
comment
Как упоминает @hoju, эта функция удалена из PyInstaller, начиная с версии 1.5. См. pyinstaller.org/wiki/FAQ#Features: в версии 1.4 мы встроили некоторая поддержка для этого, но она показала, что работает только наполовину. Для этого потребуется некоторая система Windows на другом разделе и будет работать только для программ на чистом Python. Как только вам понадобится достойный графический интерфейс (gtk, qt, wx), вам все равно придется установить библиотеки Windows. Так что намного проще просто использовать Wine. - person azalea; 26.08.2014
comment
@ChinmayKanchi У меня получилось, пожалуйста, проверьте мой ответ. - person SparkAndShine; 24.02.2016
comment
PyInstaller не поддерживает кросс-компиляцию. Вино для этого. - person Robert Moore; 05.06.2017
comment
В FAQ сказано: Нет, это не поддерживается. Пожалуйста, используйте для этого Wine, PyInstaller отлично работает в Wine - person user6039980; 28.10.2018
comment
Ответ недействителен в 2020 году - person Jacob Sánchez; 04.09.2020

Как упоминалось другими респондентами, функция кросс-компиляции удалена из PyInstaller с 1.5. Здесь показано, как упаковать исполняемый файл Windows из сценариев Python с помощью PyInstaller в разделе вино.

Шаг 1. Установите Wine и Python

sudo apt-get install wine
wine msiexec /i python-2.7.10.msi /L*v log.txt

PS:

  • Более новые версии Python уже включают pip (используется для установки pyinstaller). Загрузите установочный пакет Python с здесь (например, python-2.7.10.msi)

  • Для пользователей macos используйте brew cask install xquartz wine-stable.

Шаг 2. Установите PyInstaller на вино

$ cd ~/.wine/drive_c/Python27
$ wine python.exe Scripts/pip.exe install pyinstaller

Successfully installed pyinstaller-3.1.1 pypiwin32-219

Шаг 3. Упакуйте скрипты Python

Пакеты сценариев Python (например, HelloWorld.py) с pyinstaller.

$ wine ~/.wine/drive_c/Python27/Scripts/pyinstaller.exe --onefile HelloWorld.py

# filename: HelloWorld.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

print('Hello World!')

Исполняемый файл Windows находится в dist/.

$ wine dist/HelloWorld.exe 
Hello World!
fixme:msvcrt:__clean_type_info_names_internal (0x1e24e5b8) stub

См. здесь для Подробное описание.

person SparkAndShine    schedule 24.02.2016
comment
Вам также придется установить все зависимости в Wine (хотя у вас может быть это в Ubuntu). Убедитесь, что ваше приложение запущено с помощью команды wine python appli.py - person Jithin Pavithran; 14.10.2017
comment
Бесполезно сейчас, так как нет возможности установить python 3 на вино - person Jacob Sánchez; 04.09.2020

Вы можете запустить Windows в VirtualBox, чтобы запустить py2exe. VBox предлагает мощный клиент командной строки для автоматизации задач, поэтому вы можете легко интегрировать его в свой процесс разработки.

person Adam Crossland    schedule 01.06.2010
comment
Технически это потребует от меня второй лицензии на Windows, в чем я бы не хотел участвовать. Но +1 все равно. - person Chinmay Kanchi; 01.06.2010
comment
или вы можете использовать трещину для окон, если хотите, только для тестовых целей - person Murilo Melo; 26.11.2019
comment
вы также можете купить совершенно новый компьютер с windows - person Jacob Sánchez; 04.09.2020

Я протестировал py2exe внутри вина, и он работает. Вам нужно будет установить python в Wine, чтобы он работал, или, если вы используете только стандартную библиотеку, вы можете связать py2exe с py2exe с компьютера Windows, а затем использовать его в Wine. Просто имейте в виду, что вам нужна та же версия библиотек ms visual C в вине, которая использовалась для компиляции python, иначе что-то не будет работать должным образом.

person Perkins    schedule 12.01.2012

Протестировано на платформе: Kubuntu 20.04, wine 6.0, python38

Скачать вино и питон

  1. Загрузите версию Python для Windows со страницы https://www.python.org/downloads/release/python-3810/

  2. Установить вино sudo apt install wine

  3. Откройте свой терминал и запустите wine the-python-exe-you-downloaded

  4. Запустите find ~/.wine -name pip.exe, это даст вам путь к пункту:

/home/yourusername/.wine/drive_c/users/yourusername/Local Settings/Application Data/Programs/Python/Python38/Scripts/pip.exe

Установите pyinstaller

Запустите wine /home/yourusername/.wine/drive_c/users/yourusername/Local\ Settings/Application\ Data/Programs/Python/Python38/Scripts/pip.exe install pyinstaller

Упакуйте свой файл

Найдите путь установки

find ~/.wine -name pyinstaller.exe

wine /home/yourusernmae/.wine/drive_c/users/yourusername/Local\ Settings/Application\ Data/Programs/Python/Python38/Scripts/pyinstaller.exe --onefile yourpythonfile

person kaptaan    schedule 06.06.2021