其他Nuitka打包技巧見《Python程序打包指南》
(venv) PS C:\Users\ThinkPad> nuitka --help
Usage: __main__.py [--module] [--run] [options] main_module.py
1、常用選項(xiàng):
-
--version : 顯示版本并退出 -
-h, --help : 顯示幫助信息并退出 -
--module : 創(chuàng)建擴(kuò)展模塊可執(zhí)行文件而不是程序。默認(rèn)關(guān)閉。 -
--standalone : 為輸出啟用獨(dú)立模式。 這允許您將創(chuàng)建的二進(jìn)制文件傳輸?shù)狡渌麢C(jī)器,而無需使用現(xiàn)有的 Python 安裝。 這也意味著它會變大。 它暗含了這些選項(xiàng):“–follow-imports”。 您可能還想使用“–python-flag=no_site”來避免使用“site.py”模塊,它可以節(jié)省大量的代碼依賴。 默認(rèn)為關(guān)閉。 -
--onefile : 在獨(dú)立模式之上,啟用 onefile 模式。 這意味著不是文件夾,而是創(chuàng)建和使用壓縮的可執(zhí)行文件。 默認(rèn)為關(guān)閉。 -
--python-arch=PYTHON_ARCH : 要使用的 Python 架構(gòu)。 “x86”或“x86_64”之一。 默認(rèn)為您運(yùn)行 Nuitka 所使用的(當(dāng)前為“x86_64”)。 -
--python-debug : 是否使用調(diào)試版本。 默認(rèn)使用你用來運(yùn)行 Nuitka 的東西,很可能是非調(diào)試版本。 -
--python-flag=FLAG : 要使用的 Python 標(biāo)志。 默認(rèn)值是您用來運(yùn)行 Nuitka 的,這會強(qiáng)制執(zhí)行特定模式。 這些選項(xiàng)也存在于標(biāo)準(zhǔn) Python 可執(zhí)行文件中。目前支持:“-S”(別名“no_site”), “static_hashes”(不使用散列隨機(jī)化)、“no_warnings”(不給出 Python 運(yùn)行時警告)、“-O”(別名“no_asserts”)、“no_docstrings”(不使用文檔字符串)和“-m”。 默認(rèn)為空。 -
--python-for-scons=PATH : 如果使用 Python3.3 或 Python3.4,請?zhí)峁┯糜?Scons 的 Python 二進(jìn)制文件的路徑。 否則 Nuitka 可以使用你運(yùn)行 Nuitka 的東西,或者在 PATH 中找到的“scons”二進(jìn)制文件,或者從 Windows 注冊表。 -
--warn-implicit-exceptions : 為編譯時檢測到的隱式異常啟用警告。 -
--warn-unusual-code : 為編譯時檢測到的異常代碼啟用警告。 -
--assume-yes-for-downloads : 如有必要,允許 Nuitka 下載外部代碼,例如 Windows 上的依賴 walker、ccache 甚至 gcc。 要禁用,請重定向來自 nul 設(shè)備的輸入,例如 “</dev/null”或“<NUL:”。 默認(rèn)為提示,用戶確認(rèn)后下載。
2、控制結(jié)果中包含的模塊和包:
-
--include-package=PACKAGE : 包括一個完整的包裹。 作為 Python 命名空間給出,例如“some_package.sub_package”然后 Nuitka 將找到它并將其包含在它創(chuàng)建的二進(jìn)制或擴(kuò)展模塊中該磁盤位置下方的所有模塊,并使其可用于代碼導(dǎo)入。 為了避免不需要的子包,例如 測試你可以例如 執(zhí)行此操作“–nofollow-import-to=*.tests”。默認(rèn)為空。 -
--include-module=MODULE : 包括一個模塊。 作為 Python 命名空間給出,例如 “some_package.some_module”,然后 Nuitka 將找到它并將其包含在它創(chuàng)建的二進(jìn)制或擴(kuò)展模塊中,并使其可用于代碼導(dǎo)入。 默認(rèn)為空。 -
--include-plugin-directory=MODULE/PACKAGE : 包含該目錄的內(nèi)容,無論它是否被給定的主程序以可見的形式使用。覆蓋所有其他包含選項(xiàng)。 可以多次給予。 默認(rèn)為空。 -
--include-plugin-files=PATTERN : 包含到與 PATTERN 匹配的文件中。 覆蓋所有其他跟隨選項(xiàng)。 可以多次給出。默認(rèn)為空。 -
--prefer-source-code : 對于既有源文件又有擴(kuò)展模塊的已編譯擴(kuò)展模塊,通常使用擴(kuò)展模塊,但最好從可用源代碼編譯模塊以獲得最佳性能。 如果不需要,可以使用“–no-prefer-source-code”來禁用有關(guān)它的警告。默認(rèn)關(guān)閉。
3、將以下內(nèi)容控制到導(dǎo)入的模塊中:
-
--follow-stdlib : 還可以從標(biāo)準(zhǔn)庫中引入導(dǎo)入的模塊。 這會大大增加編譯時間。 默認(rèn)為關(guān)閉。 -
--nofollow-imports : 當(dāng)使用“–nofollow-imports”時,根本不要進(jìn)入任何導(dǎo)入的模塊,覆蓋所有其他包含選項(xiàng)。 默認(rèn)為關(guān)閉。 -
--follow-imports : 當(dāng)使用“–follow-imports”時,嘗試下降到所有導(dǎo)入的模塊。 默認(rèn)為關(guān)閉。 -
--follow-import-to=MODULE/PACKAGE : 如果使用,請導(dǎo)入該模塊,或者如果是包,則導(dǎo)入整個包??梢远啻谓o予。默認(rèn)為空。 -
--nofollow-import-to=MODULE/PACKAGE : 即使使用了該模塊名稱,也不要導(dǎo)入該模塊名稱,或者如果是包名稱,則在任何情況下都不要導(dǎo)入整個包,覆蓋所有其他選項(xiàng)。 可以多次給予。 默認(rèn)為空。
4、Data files for standalone/onefile模式:
-
--include-package-data=PACKAGE : 包含給定包名的數(shù)據(jù)文件。 可以使用模式。 默認(rèn)情況下,Nuitka 不會,除非硬編碼并且對包的操作至關(guān)重要。 這將包括發(fā)行版中的所有非 DLL、非擴(kuò)展模塊。 默認(rèn)為空。 -
--include-data-file=DESC : 在分發(fā)中按文件名包含數(shù)據(jù)文件。有許多允許的形式。 使用 '–include-data-file=/path/to/file/.txt=folder_name/some.txt’ 它將復(fù)制一個文件并抱怨它是否是多個。 使用 --include-data-file=/path/to/files/.txt=folder_name/’ 它會將所有匹配的文件放入該文件夾中。 對于遞歸復(fù)制,有一個具有 3 個值的表單,即 '–include-data-file=/path/to/scan=folder_name=**/*.txt’ 將保留目錄結(jié)構(gòu)。 默認(rèn)為空。 -
--include-data-dir=DIRECTORY : 在分發(fā)中包含來自完整目錄的數(shù)據(jù)文件。 這是遞歸的。 如果您想要非遞歸包含,請使用模式檢查“–include-data-file”。 一個示例是 '–include-data-dir=/path/somedir=data/somedir’ 用于整個目錄的純副本。 所有文件都被復(fù)制,如果要排除文件,則需要事先將其刪除。默認(rèn)為空。
5、編譯后立即執(zhí)行:
-
--run : 立即執(zhí)行創(chuàng)建的二進(jìn)制文件(或?qū)胍丫幾g的模塊)。默認(rèn)為關(guān)閉。 -
--debugger, --gdb : 在調(diào)試器中執(zhí)行,例如 “gdb”或“l(fā)ldb”自動獲取堆棧跟蹤。 默認(rèn)為關(guān)閉。 -
--execute-with-pythonpath : 立即執(zhí)行創(chuàng)建的二進(jìn)制文件 (–execute) 時,不要重置 PYTHONPATH。 成功包含所有模塊后,您應(yīng)該不再需要 PYTHONPATH 了。
6、Dump options for internal tree:
--xml : 將優(yōu)化的最終結(jié)果轉(zhuǎn)儲為 XML,然后退出。
7、代碼生成選項(xiàng):
-
--full-compat : 強(qiáng)制與 CPython 絕對兼容。 甚至不允許與 CPython 行為有細(xì)微的偏差,例如 沒有更好的回溯或異常消息,它們并不是真正不兼容,但只是不同。 這僅用于測試,不應(yīng)用于正常使用。 -
--file-reference-choice=MODE : 選擇“file”的值。 使用“runtime”(獨(dú)立二進(jìn)制模式和模塊模式默認(rèn)),創(chuàng)建的二進(jìn)制和模塊,使用自己的位置來扣除“file”的值。 包含的軟件包假裝在該位置下方的目錄中。 這允許您在部署中包含數(shù)據(jù)文件。 如果您只是尋求加速,最好使用“原始”值,將使用源文件位置。 對于“frozen”,使用符號“”。 出于兼容性原因,“file”值將始終具有“.py”后綴,與它的實(shí)際含義無關(guān)。
8、輸出選項(xiàng):
-
-o FILENAME : 指定應(yīng)如何命名可執(zhí)行文件。 對于擴(kuò)展模塊沒有選擇,對于獨(dú)立模式也沒有選擇,使用它會出錯。 這可能包括需要存在的路徑信息。 在此平臺上默認(rèn)為“<program_name>”.exe -
--output-dir=DIRECTORY : 指定中間和最終輸出文件的放置位置。 DIRECTORY 將填充 C 文件、目標(biāo)文件等。默認(rèn)為當(dāng)前目錄。 -
--remove-output : 生成模塊或 exe 文件后刪除構(gòu)建目錄。 默認(rèn)為關(guān)閉。 -
--no-pyi-file : 不要為 Nuitka 創(chuàng)建的擴(kuò)展模塊創(chuàng)建“.pyi”文件。 這用于檢測隱式導(dǎo)入。 默認(rèn)為關(guān)閉。
9、調(diào)試功能:
-
--debug : 執(zhí)行所有可能的自檢以發(fā)現(xiàn) Nuitka 中的錯誤,不要用于生產(chǎn)。 默認(rèn)為關(guān)閉。 -
--unstripped : 將調(diào)試信息保存在生成的目標(biāo)文件中,以便更好地與調(diào)試器交互。 默認(rèn)為關(guān)閉。 -
--profile : 啟用基于 vmprof 的時間分析。 目前不工作。 默認(rèn)為關(guān)閉。 -
--internal-graph : 創(chuàng)建優(yōu)化過程內(nèi)部圖,不要用于整個程序,而僅用于小測試用例。默認(rèn)為關(guān)閉。 -
--trace-execution : 創(chuàng)建優(yōu)化過程內(nèi)部圖,不要用于整個程序,而僅用于小測試用例。默認(rèn)為關(guān)閉。 -
--recompile-c-only : 這不是增量編譯,僅用于Nuitka開發(fā)。 獲取現(xiàn)有文件并再次將它們編譯為 C。允許編譯已編輯的C文件以快速調(diào)試生成的更改來源,例如 查看代碼是否通過,值輸出等,默認(rèn)為關(guān)閉。取決于編譯 Python 源代碼以確定它應(yīng)該查看哪些文件。 -
--generate-c-only : 僅生成 C 源代碼,不要將其編譯為二進(jìn)制或模塊。 這是用于不浪費(fèi) CPU 的調(diào)試和代碼覆蓋分析。 默認(rèn)為關(guān)閉。 不要認(rèn)為你可以直接使用它。 -
--experimental=FLAG : 使用聲明為“實(shí)驗(yàn)性”的功能。 如果代碼中不存在實(shí)驗(yàn)性功能,則可能無效。 每個實(shí)驗(yàn)功能使用秘密標(biāo)簽(檢查源)。 -
--low-memory : 通過分叉更少的 C 編譯作業(yè)和使用使用更少內(nèi)存的選項(xiàng)來嘗試使用更少的內(nèi)存。 用于嵌入式機(jī)器。 如果出現(xiàn)內(nèi)存不足問題,請使用此選項(xiàng)。 默認(rèn)為關(guān)閉。 -
--disable-dll-dependency-cache : 禁用依賴walker緩存。 將導(dǎo)致創(chuàng)建分發(fā)文件夾的時間更長,但可能會在懷疑緩存導(dǎo)致錯誤的情況下使用。 -
--force-dll-dependency-cache-update : 更新依賴 walker 緩存。 將導(dǎo)致創(chuàng)建分發(fā)文件夾的時間更長,但可能會在緩存被懷疑導(dǎo)致錯誤或已知需要更新的情況下使用。
10、后端C編譯器選項(xiàng):
-
--clang : 強(qiáng)制使用clang。 在 Windows 上,這需要一個工作的 Visual Studio 版本才能搭載。默認(rèn)為關(guān)閉。 -
--mingw64 : 在 Windows 上強(qiáng)制使用 MinGW64。 默認(rèn)為關(guān)閉。 -
--msvc=MSVC_VERSION : 強(qiáng)制在 Windows 上使用特定的 MSVC 版本。允許的值是例如 “14.2”(MSVC 2019),為已安裝的編譯器列表指定非法值,或使用“最新”。 請注意,僅真正支持最新的 MSVC,您可以使用“最新”來強(qiáng)制執(zhí)行。如果安裝,則默認(rèn)為 Windows 上的 MSVC,否則為 MinGW64。 -
-j N, --jobs=N :指定允許的并行 C 編譯器作業(yè)數(shù)。 默認(rèn)為系統(tǒng) CPU 計數(shù)。 -
--lto=choice : 使用鏈接時間優(yōu)化(MSVC、gcc、clang)。允許的值為“yes”、“no”和“auto”(當(dāng)它已知有效時)。 默認(rèn)為“自動”。 -
--static-libpython=choice : 使用 Python 的靜態(tài)鏈接庫。 允許的值為“yes”、“no”和“auto”(當(dāng)它已知有效時)。默認(rèn)為“auto”。 -
--disable-ccache : 不要嘗試使用 ccache(gcc、clang 等)或 clcache(MSVC、clangcl)。
10、PGO 編譯:
-
--pgo : 啟用 C 級配置文件引導(dǎo)優(yōu)化 (PGO),方法是首先執(zhí)行專門的構(gòu)建以進(jìn)行配置文件運(yùn)行,然后使用結(jié)果反饋到 C 編譯中。 注意:這是實(shí)驗(yàn)性的,還不能與 Nuitka 的獨(dú)立模式一起使用。 默認(rèn)為關(guān)閉。 -
--pgo-args=PGO_ARGS : 在配置文件引導(dǎo)優(yōu)化的情況下要傳遞的參數(shù)。 這些在 PGO 分析運(yùn)行期間傳遞給特殊構(gòu)建的可執(zhí)行文件。 默認(rèn)為空。 -
--pgo-executable=PGO_EXECUTABLE : 收集配置文件信息時執(zhí)行的命令。 僅當(dāng)您需要通過準(zhǔn)備運(yùn)行它的腳本啟動它時才使用它。 默認(rèn)使用創(chuàng)建的程序。
11、打包輔助功能:
-
--quiet : 禁用所有信息輸出,但顯示警告。默認(rèn)為關(guān)閉。 -
--show-scons :在非安靜模式下運(yùn)行 Scons,顯示執(zhí)行的命令。 默認(rèn)為關(guān)閉。 -
--show-progress :提供進(jìn)度信息和統(tǒng)計數(shù)據(jù)。 默認(rèn)為關(guān)閉。 -
--no-progressbar : 禁用進(jìn)度條輸出(如果安裝了 tqdm)。默認(rèn)為關(guān)閉。 -
--show-memory : 提供內(nèi)存信息和統(tǒng)計信息。 默認(rèn)為關(guān)閉。 -
--show-modules : 提供包含的模塊和 DLL 的信息 默認(rèn)為關(guān)閉。 -
--show-modules-output=PATH : 在哪里輸出–show-modules,應(yīng)該是一個文件名。默認(rèn)是標(biāo)準(zhǔn)輸出。 -
--report=COMPILATION_REPORT_FILENAME : 報告模塊包含在 XML 輸出文件中。 默認(rèn)為關(guān)閉。 -
--verbose :輸出所采取行動的詳細(xì)信息,尤其是。 在優(yōu)化中。 可以變成很多。 默認(rèn)為關(guān)閉。 -
--verbose-output=PATH : 在哪里輸出–verbose,應(yīng)該是一個文件名。默認(rèn)是標(biāo)準(zhǔn)輸出。
12、Windows 特定設(shè)置選項(xiàng):
-
--windows-disable-console : 為 Windows 編譯時,禁用控制臺窗口。 默認(rèn)為關(guān)閉。 -
--windows-icon-from-ico=ICON_PATH : 添加可執(zhí)行圖標(biāo)。 可以針對不同的分辨率或內(nèi)部帶有多個圖標(biāo)的文件多次給出。 在后一種情況下,您還可以使用 # 作為后綴,其中 n 是從 1 開始的整數(shù)索引,指定要包含的特定圖標(biāo),而忽略所有其他圖標(biāo)。 -
--windows-icon-from-exe=ICON_EXE_PATH : 從此現(xiàn)有可執(zhí)行文件復(fù)制可執(zhí)行圖標(biāo)(僅限 Windows)。 -
--onefile-windows-splash-screen-image=SPLASH_SCREEN_IMAGE : 為 Windows 和 onefile 編譯時,在加載應(yīng)用程序時顯示此內(nèi)容。 默認(rèn)為關(guān)閉。 -
--windows-uac-admin : 請求 Windows 用戶控制,以在執(zhí)行時授予管理員權(quán)限。(僅限 Windows)。 默認(rèn)為關(guān)閉。 -
--windows-uac-uiaccess : 請求 Windows 用戶控制,強(qiáng)制僅從幾個文件夾運(yùn)行,遠(yuǎn)程桌面訪問。 (僅限 Windows)。 默認(rèn)為關(guān)閉。 -
--windows-company-name=WINDOWS_COMPANY_NAME : 在 Windows 版本信息中使用的公司名稱。 當(dāng)需要添加版本資源時,需要文件或產(chǎn)品版本之一,例如 指定產(chǎn)品名稱或公司名稱。默認(rèn)為未使用。 -
--windows-product-name=WINDOWS_PRODUCT_NAME : 在 Windows 版本信息中使用的產(chǎn)品名稱。 默認(rèn)為二進(jìn)制文件的基本文件名。 -
--windows-file-version=WINDOWS_FILE_VERSION : 在 Windows 版本信息中使用的文件版本。必須是最多 4 個數(shù)字的序列,例如 1.0.0.0,只允許這種格式。 當(dāng)需要添加版本資源時,需要文件或產(chǎn)品版本之一,例如 指定產(chǎn)品名稱或公司名稱。 默認(rèn)為未使用。 -
--windows-product-version=WINDOWS_PRODUCT_VERSION : 在 Windows 版本信息中使用的產(chǎn)品版本。必須是最多 4 個數(shù)字的序列,例如 1.0.0.0,只允許這種格式。 當(dāng)需要添加版本資源時,需要文件或產(chǎn)品版本之一,例如 指定產(chǎn)品名稱或公司名稱。 默認(rèn)為未使用。 -
--windows-file-description=WINDOWS_FILE_DESCRIPTION : Windows 版本信息中的文件使用說明。 當(dāng)需要添加版本資源時,需要文件或產(chǎn)品版本之一,例如 指定產(chǎn)品名稱或公司名稱。 默認(rèn)為廢話。 -
--windows-onefile-tempdir-spec=ONEFILE_TEMPDIR_SPEC : 將此用作臨時文件夾。 默認(rèn)為’%TEMP%\onefile_%PID%_%TIME%’,即系統(tǒng)臨時目錄。 -
--windows-force-stdout-spec=WINDOWS_FORCE_STDOUT_SPEC : 強(qiáng)制程序的標(biāo)準(zhǔn)輸出到這個位置。 對于禁用控制臺的程序和使用 Nuitka 的 Windows 服務(wù)插件的程序很有用。 默認(rèn)為不活動,使用例如 '%PROGRAM%.out.txt’,即程序附近的文件。 -
--windows-force-stderr-spec=WINDOWS_FORCE_STDERR_SPEC : 強(qiáng)制程序的標(biāo)準(zhǔn)錯誤到這個位置。 對于禁用控制臺的程序和使用 Nuitka 的 Windows 服務(wù)插件的程序很有用。 默認(rèn)為不活動,使用例如 '%PROGRAM%.err.txt’,即程序附近的文件。
13、macOS特定設(shè)置選項(xiàng):
-
--macos-onefile-icon=ICON_PATH : 添加可執(zhí)行圖標(biāo)以供二進(jìn)制文件使用。 只能給一次。 如果可用,默認(rèn)為 Python 圖標(biāo)。 -
--macos-disable-console : 為 macOS 編譯時,禁用控制臺窗口并創(chuàng)建 GUI 應(yīng)用程序。 默認(rèn)為關(guān)閉。 -
--macos-create-app-bundle : 為 macOS 編譯時,創(chuàng)建一個包而不是一個普通的二進(jìn)制應(yīng)用程序。 目前是實(shí)驗(yàn)性的和不完整的。 目前這是解鎖控制臺禁用的唯一方法。默認(rèn)為關(guān)閉。 -
--macos-signed-app-name=MACOS_SIGNED_APP_NAME : 用于 macOS 簽名的應(yīng)用程序名稱。遵循 com.yourcompany.appname 命名結(jié)果以獲得最佳結(jié)果,因?yàn)樗鼈儽仨毷侨治ㄒ坏?,并且將授予受保護(hù)的 API 訪問權(quán)限。 -
--macos-app-name=MACOS_APP_NAME : 要在 macOS 捆綁包信息中使用的產(chǎn)品名稱。 默認(rèn)為二進(jìn)制文件的基本文件名。 -
--macos-app-version=MACOS_APP_VERSION : 在 macOS 捆綁信息中使用的產(chǎn)品版本。如果未給出,則默認(rèn)為 1.0。
14、Linux特定設(shè)置選項(xiàng):
--linux-onefile-icon=ICON_PATH : 為要使用的 onefile 二進(jìn)制文件添加可執(zhí)行圖標(biāo)。 只能給一次。 如果可用,默認(rèn)為 Python 圖標(biāo)。
15、插件控制:
-
--enable-plugin=PLUGIN_NAME, --plugin-enable=PLUGIN_NAME : 啟用插件。 必須是插件名稱。 使用 --plugin-list 查詢完整列表并退出。 默認(rèn)為空。 -
--disable-plugin=PLUGIN_NAME, --plugin-disable=PLUGIN_NAME : 禁用插件。 必須是插件名稱。 使用 --plugin-list 查詢完整列表并退出。 默認(rèn)為空。 -
--plugin-no-detection : 插件可以檢測它們是否被使用,您可以通過“–disable-plugin=plugin-that-warned”禁用警告,或者您可以使用此選項(xiàng)完全禁用該機(jī)制,這也可以稍微加快編譯速度 當(dāng)然,因?yàn)橐坏┠_定要使用哪些插件,此檢測代碼就會徒勞運(yùn)行。 默認(rèn)為關(guān)閉。 -
--plugin-list : 顯示所有可用插件的列表并退出。 默認(rèn)為關(guān)閉。 -
--user-plugin=PATH : 用戶插件的文件名。 可以多次給予。 默認(rèn)為空。 -
--persist-source-changes : 將源代碼更改寫入原始 Python 文件。 小心使用。 可能需要權(quán)限,如果插件代碼更改適用于標(biāo)準(zhǔn) Python,則最適合在 virtualenv 中使用進(jìn)行調(diào)試,或者即使使用純 Python 也能從消除臃腫中受益。 默認(rèn)False。
|