Кросс-компиляция скрипта Python под Linux в исполняемый файл Windows - PullRequest
47 голосов
/ 01 июня 2010

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

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

Ответы [ 4 ]

27 голосов
/ 24 февраля 2016

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

Шаг 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)

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

$ 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

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

16 голосов
/ 01 июня 2010

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

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

http://www.pyinstaller.org/browser/tags/1.4/doc/CHANGES.txt говорит:

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

Я сам не пробовал.

Надеюсь, это поможет

4 голосов
/ 01 июня 2010

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

3 голосов
/ 12 января 2012

Я проверил py2exe внутри Wine, и он работает. Вам нужно будет установить python в Wine, чтобы он работал, или, если вы используете только стандартную библиотеку, вы можете связать py2exe с py2exe с машины Windows, а затем использовать его в wine. Просто помните, что вам нужна та же версия MS Visual C библиотек в Wine, которая использовалась для компиляции Python, иначе все будет работать некорректно.

...