web-dev-qa-db-ja.com

Linux上のPythonスクリプトをWindows実行可能ファイルにクロスコンパイルする

Windows実行可能ファイルにコンパイルしたいPythonスクリプトがあります。現在、py2exeはWindowsで正常に動作しますが、Linuxから実行できるようにしたいと思います。私はdo開発マシンにWindowsがありますが、Linuxが私の主な開発プラットフォームであり、.exeを作成するためにWindowsを再起動するのはうんざりしています。また、VirtualBoxなどの仮想マシンで実行するために2つ目のWindowsライセンスを購入する必要もありません。何か案は?

PS:py2exeはpythonインタープリターでスクリプトをパッケージ化するほど正確にはPythonファイルをコンパイルしないことを知っています。しかし、どちらにしても、結果として、スクリプトを実行するのにPythonをインストールする必要はありません。

49
Chinmay Kanchi

PyInstaller を見ましたか?

1.4までのバージョンはクロスコンパイルをサポートしているようです(1.5+ではサポートが削除されました)。 WineでPyInstaller 1.5+を使用して行う方法については、 この回答 を参照してください。

http://www.pyinstaller.org/browser/tags/1.4/doc/CHANGES.txt 言います:

クロスコンパイルのサポートを追加:PyInstallerは、Linuxで実行中にWindows実行可能ファイルをビルドできるようになりました。詳細については、ドキュメントを参照してください。

私は自分で試しませんでした。

私はそれが役立つことを願っています

17
luc

他の回答者が述べたように、クロスコンパイル機能は1.5以降の PyInstaller から削除されました。ここでは、Windows実行可能ファイルをPython PyInstaller under 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をワインにインストールする

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

Successfully installed pyinstaller-3.1.1 pypiwin32-219

ステップ3:パッケージPython scripts

パッケージ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

詳細な説明については here を参照してください。

28
SparkAndShine

Py2exeを実行するには、Windowsを VirtualBox で実行できます。 VBoxは、タスクを自動化するための強力なコマンドラインクライアントを提供するため、開発プロセスに簡単に統合できます。

4
Adam Crossland

Wine内でpy2exeをテストしましたが、機能します。動作させるにはwineにpythonをインストールする必要があります。または、標準ライブラリのみを使用する場合は、py2exeをWindowsマシンのpy2exeにバンドルしてwineで使用できます。 pythonをコンパイルするために使用されたのと同じバージョンのwineのmsビジュアルCライブラリが必要です。さもないと、物事が正しく動作しません。

3
Perkins