簡體   English   中英

構建 pyinstaller 可執行文件時,我可以控制架構(32 位還是 64 位)?

[英]Can I control the architecture (32bit vs 64bit) when building a pyinstaller executable?

簡短的問題
在構建 pyinstaller 可執行文件時,有什么方法可以控制/保證架構(32 位與 64 位)?

背景
我從 py2exe 遷移到 pyinstaller,因為缺乏 64 位支持以及我很難回顧的許多小東西。 所以,關於這一點,我寧願回去呢。 我已經使用 Python 2.7 64 位開發了兩個應用程序,並且在 32 位機器上運行時遇到了性能問題。

第一個是一個簡單的 wxPython GUI(2.9 版)並連接到一個用於 USB 驅動程序的 Windows DLL 文件。 這個以 32 位運行似乎非常“安全”,因為沒有僅 64 位的模塊。 然而,這個應用程序在 32 位 Windows XP 上運行時在與 USB 設備通話時會出現可怕的性能問題。

第二個應用程序要大得多,由於擔心架構問題,我還沒有嘗試構建和運行。 此應用程序中使用了許多僅 64 位的模塊(一個是 psycopg2)。 如果無法作為 32 位可執行文件運行,我不想嘗試構建它。

當前想法
我覺得通過在 32 位模式下強制使用 Python 運行 build.py,這可能是可能的(如果模塊具有 32 位支持)。 這有道理嗎?

更新
我在構建的第一個程序上取得了一些突破。 事實證明,性能問題完全取決於兩台機器的速度。 我的開發機器有足夠的功率來足夠快地輪詢 USB 設備,而速度較慢的測試平台 (Windows XP) 則沒有。

我通過修改輪詢 USB 端口的方式解決了這個問題。 現在這已解決,我可以在兩個系統上運行 exe。 嘗試將可執行文件構建為單個文件時出現了一個新問題。 運行 pyinstaller 的 Build.py 時,它會引入應用程序需要運行的所有必需 DLL。 起初這似乎很好用,但是當我嘗試運行我在 Windows 7 64 位上構建的單個 exe 時,它​​無法在 Windows XP 上運行,因為 USB 加密狗的 DLL 未被識別為有效的 DLL。

為了讓單個 exe 在兩個系統上運行,我首先嘗試從 .spec 文件(它似乎是一個 python 腳本)中刪除 DLL。 這很方便,因為我能夠在使用普通 python 列表修飾符的 build 命令之前修改包含列表。 我希望如果在 exe 的臨時目錄中找不到 DLL,它會在系統 PATH 中找到它。 雖然這種方法可能有效,但我無法在不拋出大量錯誤的情況下運行它。

我的第二次嘗試是在 Windows XP 機器上構建應用程序(保留 DLL 嵌入),希望 Win XP DLL 能夠在 Windows 7 中運行。成功! 這種配置效果很好; 但是我堅信這不是最好的解決方案,因為它完全取決於在較新操作系統上運行的較舊 DLL。

Pyinstaller 根據您用來構建它的 python 生成一個二進制文件。 因此,如果您使用 python 2.7 64 位,據我所知,生成 32 位可執行文件是不可能的。 這是因為 Pyinstaller 將所有模塊及其依賴項(dll、pyds 等)存檔,這些模塊由於 python 安裝而為 64 位。

如前所述,由於交叉兼容性問題,最好構建 32 位二進制文​​件。 也許你可以指定更多你的問題。

如果您正在構建一個應用程序並且它在 32 位 Windows 上運行良好,則無需創建 64 位版本。 只需創建一個 32 位版本並在兩種架構上運行它。 WOW64 是干什么用的。

如果您需要使用僅限 64 位的庫或功能,只需構建 64 位版本。 如果功能僅為 64 位,則構建 32 位版本毫無意義。

同時構建 64 位和 32 位版本的唯一原因是利用 64 位窗口增加的地址空間。 即,如果您打算分配超過 1 或 2 GB 的內存。 例如,圖像編輯應用程序或數據處理應用程序。 然后,您可以在平台的限制內在 32 位平台上運行,但在 64 位平台上編輯更大的圖像或更大量的數據。

IOW,對於您的情況,如果您要構建 32 位 exe,請遵循 @Velociraptors 的建議並構建 32 位 python。

如果您想在 64 位系統上構建 32 位應用程序並且只安裝了 64 位版本的 Python,則還必須安裝 32 位版本的 Python。 然后,您必須將 pyinstaller 安裝到該 32 位 Python 版本,如下所示:

path/to/32-bit/python -m pip install pyinstaller

之后,您可以運行 32 位版本的 pyinstaller,從而構建一個 32 位應用程序,如下所示:

path/to/32-bit/pyinstaller your-app.py

在 Windows 10 上, pyinstaller.exe位於C:\\Users\\<user>\\AppData\\Local\\Programs\\Python\\Python<version>-32\\Scripts\\pyinstaller.exe

如您所見,您要構建的應用程序的體系結構取決於您將用於構建該應用程序的 Python 和 pyinstaller 版本。 例如,如果系統上安裝了 Python 2.x 版本,您還可以通過這種方式構建應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM