我一直在努力研究如何通過pyinstaller的文檔來做到這一點,但我沒有任何運氣。將.py編譯爲Windows和Windows上的可執行文件
我有一個.py文件,我需要在Windows 7中創建一個.exe文件可執行文件,並在OS X Lion中創建一個.app(或任何可以工作的)可執行文件。問題是,當我用
python pyinstaller.py my_code.py
它編譯成一個linux可執行文件。
我一直在努力研究如何通過pyinstaller的文檔來做到這一點,但我沒有任何運氣。將.py編譯爲Windows和Windows上的可執行文件
我有一個.py文件,我需要在Windows 7中創建一個.exe文件可執行文件,並在OS X Lion中創建一個.app(或任何可以工作的)可執行文件。問題是,當我用
python pyinstaller.py my_code.py
它編譯成一個linux可執行文件。
我可以打包Windows可執行文件在Linux下運行時?
不,這不支持。請爲 使用Wine,PyInstaller在Wine中運行良好。您可能也需要 來看看this thread in the mailinglist。在版本1.4中,我們 已經爲此提供了一些支持,但它只顯示了一半。 這將需要一些Windows系統在另一個分區上,並且 僅適用於純Python程序。只要你想要一個像樣的GUI (gtk,qt,wx),你需要安裝Windows庫。所以 只要使用Wine就容易多了。
換句話說,您不能簡單地在Linux中運行命令來構建Windows可執行文件(或Mac可執行文件),就像您正在嘗試執行的操作一樣。他們爲Windows(並且僅限於Windows)提供的解決方法是安裝Wine。
Wine是一個允許Windows程序在Linux上運行的程序。它創建了一個複製Windows環境的環境。我們的想法是,您將在此環境中安裝Python(使用Windows Python安裝程序)以及您需要的任何其他庫(如pyinstaller)。然後,仍然在該環境中,您運行python pyinstaller。
我還沒有完成所有這些,但FAQ中提到的郵件列表線程是一個好的開始。下面是一個例子,他們使用:
PYDIR="c:/Python27"
PYTHON="wine $PYDIR/python.exe"
WINPWD=$(winepath -w $(pwd))
cd pyinstaller
$PYTHON Configure.py
$PYTHON Makespec.py -p $WINPWD $WINPWD/diceroller.py
$PYTHON Build.py diceroller/diceroller.spec
它看起來像這樣使用舊的「Configure.py」,「Makespec.py」和「Build.py」,而如今的「pyinstaller.py」腳本嘗試爲你做這一切。
Pyinstaller不會爲跨平臺目標構建可執行文件,只適用於Pyinstaller「本地」運行的平臺。但是,WINE允許在Linux下運行本機Windows Pyinstaller,因此它可以用於將Linux上開發的Python腳本構建到僅使用單個Linux主機的本機Windows .exe可執行文件中 - 不需要單獨的Windows主機。這些說明不針對Mac。
我使用的是64位奔騰型的Ubuntu 15.10。
$ uname -op
x86_64 GNU/Linux
$ grep DISTRIB_DESCRIPTION /etc/lsb-release
DISTRIB_DESCRIPTION="Ubuntu 15.10"
確保已安裝Python。
$ apt-get install python2.7
[installed OK]
$ python --version
Python 2.7.10
(升級和)使用Python包管理器安裝和 在Linux上可能升級Pyinstaller。沒有超級用戶 權限的情況下運行pip可能會失敗。
$ sudo -H pip install --upgrade pip
[upgraded OK]
$ sudo -H pip install PyInstaller
[installed OK]
$ sudo -H pip install --upgrade pyinstaller
[installed OK]
$ pyinstaller --version
3.0
您可以安裝Python/Pyinstaller,安裝/配置酒和寫任何順序 Python代碼(雖然運行的代碼需要Python是 安裝)。使用Python軟件包管理器將Python 軟件包懸掛安裝到您的Python項目中。
$ pip install package1 [package2, ...]
[packages installed OK]
測試打包針對Linux的可執行文件。
$ cd python-project
$ pyinstaller --onefile python-project.py
[built OK]
$ dist/python-project
[ran OK]
如果沒有建立或運行正常,嘗試建立它作爲--onedir的 Pyinstaller默認情況下,不包括在 單的可執行文件下垂。這不應該建立/運行任何不同於單文件版本的 ,但它可以更容易地調試然後 應該建立OK作爲一個文件的onedir。
確保安裝葡萄酒和配置它使用你選擇的 目標Windows版本(如Windows 7):
$ wine --version
wine-1.7.50
$ winecfg
[GUI: Applications tab > Windows Version: Windows 7]
用wine安裝Windows的Python,pywin32(Windows圖形用戶界面 擴展) ;匹配他們的版本。您應該可以訪問每個 安裝程序的下載頁面,以獲取正確的版本和鏡像,而不是這些當前直接下載鏈接的 。請注意,運行WINE 會將很多WINE bug通知轉儲到控制檯;在這個程序中幾乎都是微不足道的。
$ mkdir -p /opt/windows $ pushd /opt/windows
$ wget https://www.python.org/ftp/python/2.7.10/python-2.7.10.amd64.msi
$ wget http://iweb.dl.sourceforge.net/project/pywin32/pywin32/Build%20219/pywin32-219.win-amd64-py2.7.exe
$ wine msiexec -i python-2.7.10.amd64.msi $ wine msiexec -i pywin32-219.win-amd64-py2.7.exe
$ popd
我曾與Python的2.7.10 MSI嚮導未能「下一步」 選擇安裝目錄後的問題,所以我取消它那裏, 運行它再次加抑制的GUI的-qn選項。它 抱怨了一點,但它完成了安裝。如果您需要 在您的Linux文件系統中查找Windows Python,則默認 安裝在您的 主目錄的Linux用戶的默認WINE「C:」目錄中。 〜/ .wine/drive_c/Python27。
$ wine C:/Python27/python --version Python 2.7.10
$ find ~/.wine/drive_c -name python.exe ~/.wine/drive_c/Python27/python.exe
升級Windows pip並使用WINE Python/pip安裝Pyinstaller。
$ wine C:/Python27/Scripts/pip.exe install --upgrade pip
[upgraded OK]
$ wine C:/Python27/Scripts/pip.exe --version
pip 7.1.2 from C:\Python27\lib\site-packages (python 2.7)
$ wine C:/Python27/Scripts/pip.exe install pyinstaller
[installed OK]
$ wine c:/Python27/python.exe C:/Python27/Scripts/pyinstaller-script.py --version
3.0
與Windows安裝項目的懸掛包點子
$ wine C:/Python27/Scripts/pip.exe install xlwt
[installed OK]
現在你的Windows(酒)Python環境等價配置 到您的Linux原生環境。運行Windows WINE下的Pyinstaller會生成本機Windows .exe可執行文件。 使用Windows Python腳本版本的Windows Pyinstaller到 保持與您的Linux文件系統中的python項目(它不需要複製到WINE Windows文件系統的 )的Python項目的已測試的OK Linux Pyinstaller程序 奇偶校驗。保持 將Windows構建和dist目錄與經過測試的OK Linux分開,可以幫助調試打包過程。
$ wine c:/Python27/python.exe C:/Python27/Scripts/pyinstaller-script.py --onefile --workpath=./win-wrk --distpath=/opt/windows python-project.py
[packaged OK]
$ ls -F /opt/windows/python-project.exe
python-project.exe*
$ wine /opt/windows/python-project.exe
[Windows app runs OK]