2013-07-17 69 views
4

我一直在努力研究如何通過pyinstaller的文檔來做到這一點,但我沒有任何運氣。將.py編譯爲Windows和Windows上的可執行文件

我有一個.py文件,我需要在Windows 7中創建一個.exe文件可執行文件,並在OS X Lion中創建一個.app(或任何可以工作的)可執行文件。問題是,當我用

python pyinstaller.py my_code.py 

它編譯成一個linux可執行文件。

回答

2

pyinstaller FAQ

我可以打包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」腳本嘗試爲你做這一切。

3

Pyinstaller不會爲跨平臺目標構建可執行文件,只適用於Pyinstaller「本地」運行的平臺。但是,WINE允許在Linux下運行本機Windows Pyinstaller,因此它可以用於將Linux上開發的Python腳本構建到僅使用單個Linux主機的本機Windows .exe可執行文件中 - 不需要單獨的Windows主機。這些說明不針對Mac。

  1. 我使用的是64位奔騰型的Ubuntu 15.10。

    $ uname -op 
    x86_64 GNU/Linux 
    $ grep DISTRIB_DESCRIPTION /etc/lsb-release 
    DISTRIB_DESCRIPTION="Ubuntu 15.10" 
    
  2. 確保已安裝Python。

    $ apt-get install python2.7 
    [installed OK] 
    $ python --version 
    Python 2.7.10 
    
  3. (升級和)使用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 
    
  4. 您可以安裝Python/Pyinstaller,安裝/配置酒和寫任何順序 Python代碼(雖然運行的代碼需要Python是 安裝)。使用Python軟件包管理器將Python 軟件包懸掛安裝到您的Python項目中。

    $ pip install package1 [package2, ...] 
    [packages installed OK] 
    
  5. 測試打包針對Linux的可執行文件。

    $ cd python-project 
    $ pyinstaller --onefile python-project.py 
    [built OK] 
    $ dist/python-project 
    [ran OK] 
    

    如果沒有建立或運行正常,嘗試建立它作爲--onedir的 Pyinstaller默認情況下,不包括在 單的可執行文件下垂。這不應該建立/運行任何不同於單文件版本的 ,但它可以更容易地調試然後 應該建立OK作爲一個文件的onedir。

  6. 確保安裝葡萄酒和配置它使用你選擇的 目標Windows版本(如Windows 7):

    $ wine --version 
    wine-1.7.50 
    $ winecfg 
    [GUI: Applications tab > Windows Version: Windows 7] 
    
  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 
    
  8. 升級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 
    
  9. 與Windows安裝項目的懸掛包點子

    $ wine C:/Python27/Scripts/pip.exe install xlwt 
    [installed OK] 
    
  10. 現在你的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] 
    
相關問題