首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >[1324]Python打包exe工具Nuitka

[1324]Python打包exe工具Nuitka

作者头像
周小董
发布于 2025-04-20 12:20:34
发布于 2025-04-20 12:20:34
1.1K00
代码可运行
举报
文章被收录于专栏:python前行者python前行者
运行总次数:0
代码可运行

官方开源地址:https://github.com/Nuitka/Nuitka

需求

自己写的python代码,不想给别人看,直接让别人用,且不能被破解看到源码,还得追求一下运行速度!(当然可以用go、c++等来写代码)

打包思路

  • pyinstaller 简单,成功率高,但是能直接被解译。(优点:简单、成功率高;缺点:容易被破解看到源码)
  • cx_freeze 不太追求性能的话,只是为了将代码编译,不被别人反编译查看到,可以。(优点:不被破解看到源码;缺点:比nuitka速度慢)
  • Nuitka 追求速度,且不被反编译直接看到源码,可以。(优点:性能更快;缺点:打包资料少,成功率低,需要一些稳定的版本,尽量别乱升级版本)
nuitka打包环境

nuitka是一个用来将python代码打包为exe可执行文件,方便其在没有相关环境的windows系统上运行的工具。其原理为:将python代码(自己写的部分)转换成C代码,以提高运行的速度,支持所有平台。

windows环境下(win7最高支持python3.8的打包)

当前环境:win10 64位、python3.9、nuitka1.9.5

①安装nuitka:pip install nuitka==1.9.5(推荐使用1.9.5)

②nuitka打包需要c环境,推荐mingw64,下载链接(SourceForge上的GCC版本才8.1,推荐直接github上下载mingw-builds-binaries),不推荐安装VS。

mingw64安装教程:选择 64位、ucrt 的下载(至于ucrt和msvcrt、posix是啥自行百度),然后解压,将其中 mingw64/bin的文件夹的绝对路径 放到 系统环境变量Path中

③首次打包,会提示需要下载一些依赖,自动联网下载到c盘个人用户\appdata\local\nuitka下,主要下载depends(Dependency Walker)ccache

nuitka打包命令

cmd中 执行 nuitka --help > command.txt,然后vscode打开command.txt就可以一目了然。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python -m nuitka --help # 查看 Nuitka 帮助手册
python -m nuitka --plugin-list # 查看 Nuitka 插件列表
常用命令:

【1】nuitka --standalone --mingw64 --enable-plugins=tk-inter --disable-console --remove-output --output-dir=o main.py

【2】命令解释

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--standalone	设置独立环境,不使用python环境
--mingw64	指定编译依赖环境,推荐用
--enable-plugins=	指定支持的插件,nuitka --plugin-list 命令查看。pysimplegui依赖tkinter,需要设置--enable-plugins=tk-inter
--disable-console	取消cmd显示,但测试时建议去掉,好找错误。
--remove-output	删除输出文件夹中的 .build文件夹-没啥用
--output-dir=	指定输出文件夹,.dist文件夹中exe为执行程序
--nofollow-import-to=	指定不参与打包的库,那么这个库依赖的库也不会打包,后期需要一个个复制过来
--show-memory	显示打包内存
--show-progress	显示打包过程

==============================================================
--standalone 使得打包结果与本地的Python环境无关,即使得打包结果具备可移植性。
--onefile 使得打包结果为一个可执行文件,而不是一个文件夹。
小结:--onefile选项下打出来的包本身就具备可移植性,因此不需要额外加上 --standalone。--onefile 打包结果像绿色软件,仅一个可执行文件;--standalone的打包结果像经过安装的软件,文件夹下包含运行所需要的文件和程序入口。

--lto用于启用链接时间优化。链接时间优化是一种编译器优化技术,它可以在编译和链接阶段对整个程序进行优化,而不仅仅是对单个源文件进行优化。通过启用lto,您可以让编译器在链接时对生成的目标代码进行更深入的优化,提高程序的性能和执行效率
--remove-output 在打包结束后,清理打包过程中生成的临时文件。
--enable-plugin= 启用插件,等号后跟插件名。在要打包的Python代码使用了一些特殊的包时,需要启用插件,Nuitka才能够正确打包。如:如在代码中使用了PySide6,就需要加上--enable-plugin=pyside6。具体的插件列表可以使用nuitka --plugin-list来查看。
--disable-console 在运行打包后的程序时,不会弹出控制台,而是直接运行GUI程序。
--include-package-data= 包含给定软件包名称中的数据文件,等号后软件包名称。有的时候Nuitka并不能正确分析出一些Python软件包所需要使用的数据文件,在运行程序时提示FileNotFoundError等错误,此时就需要使用该选项。如:--include-package-data=ultralytics
--include-data-files= 按文件名包含数据文件,等号后的格式为<SRC=DEST>SRC指的是文件夹的路径,DEST指的是文件夹相对于打包结果的路径,其中DEST只能使用相对路径。如:--include-data-files=/Users/admin/Downloads/yolov5n.pt=./yolov5n.pt
--include-data-dir= 包含文件夹中的数据文件,等号后的格式为<SRC=DEST>。使用方法与--include-data-files=相同。

【3】注意: 在使用pysimplegui(PySimpleGUI教程)时,需要在主代码中添加import tkinter as tk,并且设置--enable-plugins=tk-inter,这样可以让nuitka打包tkinter进你的代码中!

②在使用pyside6/pyqt6(PySide6教程)时,需要设置--enable-plugins= pyside6或者pyqt6。

将py文件打包成pyd

如果可以直接采用nuitka打包exe,那么这种方式就可以不用(不过据说nuitka直接打包对于复杂环境的失败率高;例如conda安装的cuda等)。

有人推荐将自己的核心代码放到1个文件夹中,打包成pyd,然后采用nuitka或者pyinstaller打包,这样就不会影响核心代码被别人反编译看到了!

个人的需求:能直接用nuitka直接打包就直接打包,例如conda环境太复杂,为了保护代码,就将核心代码打包成pyd吧!!!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
nuitka --module AutoShp.py  不写include 默认不可import  只能from import导入

nuitka --module --include-module=AutoShp AutoShp.py 将py文件视为module,将文件夹视为package

额外信息(摘自:Nuitka-Python打包exe):

module 通常模块为一个文件,直接使用import来导入就好了。可以作为module的文件类型".py"、“.pyo”、“.pyc”、“.pyd”、“.so”、“.dll”。(可以直接import pyd文件)

package 通常包总是一个目录,可以使用import导入包,或者from + import来导入包中的部分模块。包目录下为首的一个文件便是 __init__.py。然后是一些模块文件和子目录,假如子目录中也有 __init__.py那么它就是这个包的子包了。

使用--module参数,将包/模块打包为二进制的pyd文件。module在这里可能会有点歧义,实际上借助--include参数,对于包/模块/目录(package/module/directory),都能打包为pyd。

打包pyd文件,必须借助--include参数,这是因为打包pyd的时候没有入口文件,所以就没有import可以follow,因此就必须要用到include对整个包进行指定,否则打包出来的pyd文件里面不会有任何的内容,引用这个pyd文件会提示找不到模块

举例
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
使用 Nuitka 将简单的 python3 代码编译为带有numpy模块的C代码
python -m nuitka --lto=no --onefile --standalone --include-module=numpy test1.py

python -m nuitka --standalone --remove-output {your_python_program_name}.py
python -m nuitka --onefile --remove-output {your_python_program_name}.py
 
python -m nuitka --standalone --disable-console --enable-plugin=pyside6 --remove-output {your_python_GUI_program_name}.py
python -m nuitka --macos-create-app-bundle --disable-console --enable-plugin=pyside6 --remove-output {your_python_GUI_program_name}.py
注意事项

1.官方文档中提到,相对于直接使用nuitka命令,python -m nuitka是更好的选择。

Avoid running the nuitka binary, doing python -m nuitka will make a 100% sure you are using what you think you are. Using the wrong Python will make it give you SyntaxError for good code or ImportError for installed modules. That is happening, when you run Nuitka with Python2 on Python3 code and vice versa. By explicitly calling the same Python interpreter binary, you avoid that issue entirely.

2.用于执行Nuitka的Python解释器最好是CPython,即Python解释器的标准实现。使用Apple Python等Python解释器部分功能将受限。

It has to be CPython, Anaconda Python.

You need the standard Python implementation, called “CPython”, to execute Nuitka, because it is closely tied to implementation details of it.

Nuitka优缺点
  • 优点 对动态链接库的分析相对准确 打包生成的软件占用空间较小
  • 缺点 打包时间相对较长 有商业版本,需要收费
  • 命令
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Options:
--help                        显示此帮助消息并退出
--version                     显示错误报告的版本信息和重要详细信息,然后退出。默认为关闭。
--module                      创建一个可执行的扩展模块,而不是一个程序。默认为关闭。
--standalone                  为输出启用独立模式。这允许您在不使用现有Python安装的情况下将创建的二进制文件传输到其他机器。这也意味着它将变得更大。它暗示了以下选项:"--follow imports""--python flag=no_site"。默认为关闭。
--onefile                     在独立模式之上,启用onefile模式。这意味着不是一个文件夹,而是一个压缩的可执行文件被创建和使用。默认为关闭。
--python-debug                是否使用调试版本。Default使用您正在使用的来运行Nuitka,很可能是非调试版本。
--python-flag=FLAG            要使用的Python标志。默认值是您用来运行Nuitka的内容,这会强制执行特定的模式。这些选项也存在于标准Python可执行文件中。当前支持:"-S"(别名"no_site")、"static_hashes"(不使用哈希随机化)、"no_warnings"(不给出Python运行时警告)、"-O"(别名为"no_assels")、"no_docstring"(不使用文档字符串)、"-u"(别名为"unbuffered")和"-m"。默认为空。
--python-for-scons=PATH     如果使用Python3.3或Python3.4,请提供用于Scons的Python二进制文件的路径。否则,Nuitka可以使用您运行Nuitka的软件,也可以使用Windows注册表中的Python安装。在Windows上,需要Python 3.5或更高版本。在非Windows上,Python 2.62.7也可以。
常用选项
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--mingw64 #默认为已经安装的vs2017去编译,否则就按指定的比如mingw(官方建议)
--standalone 独立环境,这是必须的(否则拷给别人无法使用)
--windows-disable-console 没有CMD控制窗口
--output-dir=out 生成exe到out文件夹下面去
--show-progress 显示编译的进度,很直观
--show-memory 显示内存的占用
--enable-plugin=pyside6  打包pyside6模块的刚需
--plugin-enable=tk-inter 打包tkinter模块的刚需
--plugin-enable=numpy 打包numpy,pandas,matplotlib模块的刚需
--plugin-enable=torch 打包pytorch的刚需
--plugin-enable=tensorflow 打包tensorflow的刚需
--windows-icon-from-ico=你的.ico 软件的图标
--windows-company-name=Windows下软件公司信息
--windows-product-name=Windows下软件名称
--windows-file-version=Windows下软件的信息
--windows-product-version=Windows下软件的产品信息
--windows-file-description=Windows下软件的作用描述
--windows-uac-admin=Windows下用户可以使用管理员权限来安装
--linux-onefile-icon=Linux下的图标位置
--onefile 像pyinstaller打包成单个exe文件
--include-package=复制比如numpy,PyQt5 这些带文件夹的叫包或者轮子
--include-module=复制比如when.py 这些以.py结尾的叫模块
–-include-package-data=包含给定软件包名称中的数据文件,等号后软件包名称。有的时候Nuitka并不能正确分析出一些Python软件包所需要使用的数据文件,在运行程序时提示FileNotFoundError等错误,此时就需要使用该选项。如:--include-package-data=ultralytics
–-include-data-files= 按文件名包含数据文件,等号后的格式为<SRC=DEST>SRC指的是文件夹的路径,DEST指的是文件夹相对于打包结果的路径,其中DEST只能使用相对路径。如:--include-data-files=/Users/admin/Downloads/yolov5n.pt=./yolov5n.pt
-–include-data-dir= 包含文件夹中的数据文件,等号后的格式为<SRC=DEST>。使用方法与--include-data-files=相同。
--follow-import-to=MODULE/PACKAGE          如果使用该模块,请遵循该模块;如果是一个包,请遵循整个包。可以多次给定。默认为空。

控制结果中包含的模块和包
--include-package=PACKAGE                        包括整个包裹。作为Python命名空间,例如"some_package.sub_package",然后Nuitka会找到它,并将它和在该磁盘位置下找到的所有模块包括在它创建的二进制或扩展模块中,并使其可供代码导入。为了避免不需要的子包,例如测试,您可以这样做"--nofollow import To=*.tests"。默认为空。
--include-module=MODULE                            包括单个模块。将其作为Python命名空间,例如"some_package.some_module",然后Nuitka会找到它,并将其包含在它创建的二进制或扩展模块中,并使其可由代码导入。默认为空。
--include-plugin-directory=MODULE/PACKAGE         还包括在该目录中找到的代码,将它们视为一个主文件。覆盖所有其他包含选项。您应该更喜欢其他包含选项,这些选项以名称而不是文件名命名,这些选项通过在"sys.path"中查找内容。此选项仅适用于非常特殊的用例。可以多次给定。默认为空。
--include-plugin-files=PATTERN                     包括在与图案匹配的文件中。覆盖所有其他跟随选项。可以多次给定。默认为空。
--prefer-source-code                             对于已经编译的扩展模块,其中既有源文件又有扩展模块,通常使用扩展模块,但最好从可用的源代码编译模块以获得最佳性能。如果不需要,则有--no-preferred源代码来禁用有关它的警告。默认为关闭。

控制到导入的模块
--follow-imports                        下降到所有导入的模块中。在独立模式下默认为打开,否则为关闭。
--follow-import-to=MODULE/PACKAGE          如果使用该模块,请遵循该模块;如果是一个包,请遵循整个包。可以多次给定。默认为空。
--nofollow-import-to=MODULE/PACKAGE       即使使用该模块名称,也不要跟随该模块名称;或者,如果包名称在任何情况下覆盖整个包,则覆盖所有其他选项。可以多次给定。默认为空。
--nofollow-imports                      根本不要进入任何导入的模块,覆盖所有其他包含选项,并且不适用于独立模式。默认为关闭。
--follow-stdlib                         还可以从标准库中导入模块。这将大大增加编译时间,而且目前还没有经过很好的测试,有时也无法工作。默认为关闭。

OneFile选项
--onefile-tempdir-spec=ONEFILE_TEMPDIR_SPEC       将其用作在一个文件模式下解压缩到的文件夹。默认为"%TEMP%/onefile_%PID%_%TIME%",即用户临时目录,并且是非静态的,它将被删除。例如,使用"%CACHE_DIR%%COMPANY%/%PRODUCT%/%VERSION%"这样的字符串,这是一个良好的静态缓存路径,因此不会删除。
--onefile-child-grace-time=GRACE_TIME_MS           当停止子项时,例如由于CTRL-C或关机等原因,Python代码会得到一个"KeyboardInterrupt",它可以处理该中断,例如刷新数据。这是以毫秒为单位的时间,在它以艰难的方式杀死孩子之前。单位为毫秒,默认为5000。

数据文件
--include-package-data=PACKAGE               当停止子项时,例如由于CTRL-C或关机等原因,Python代码会得到一个"KeyboardInterrupt",它可以处理该中断,例如刷新数据。这是以毫秒为单位的时间,在它以艰难的方式杀死孩子之前。单位为毫秒,默认为5000--include-data-files=DESC                      在分发中按文件名包括数据文件。允许的形式有很多。使用"--include data files=/path/to/file/*.txt=folder_name/some.txt",它将复制单个文件,如果是多个文件,则会抱怨。使用"--include data files=/path/to/files/*.txt=folder_name/",它会将所有匹配的文件放入该文件夹。对于递归复制,有一个具有3个值的表单"--include data files=/path/to/scan=folder_name=**/*.txt",将保留目录结构。默认为空。
--include-data-dir=DIRECTORY                   在分发中包括完整目录中的数据文件。这是递归的。如果您想要非递归包含,请使用模式检查"--include data files"。一个例子是整个目录的"--include data dir=/path/some_dir=data/some_dir"(用于纯拷贝)。所有文件都将被复制,如果要排除文件,则需要事先将其删除,或者使用"--noinclude data files"选项将其删除。默认为空。
--noinclude-data-files=PATTERN              不要包含与给定文件名模式匹配的数据文件。这是针对目标文件名,而不是源路径。因此,要忽略包数据中的文件模式,"package_name"应匹配为"package_name/*.txt"。或者,对于整个目录,只需使用"packagename"。默认为空。
--list-package-data=LIST_PACKAGE_DATA          输出为给定包名称找到的数据文件。未完成默认设置。

DLL文件
--noinclude-dlls=PATTERN                       不包括与文件名模式匹配的DLL文件鉴于这是针对目标文件名,而不是源文件名路径。因此,忽略包含在软件包"package_name"应匹配为"软件包名称/someDLL.*"。默认为空。            
--list-package-dlls=LIST_PACKAGE_DLLS       输出为给定程序包名称找到的DLL。未完成默认设置。

控制Nuitka发出的警告
--warn-implicit-exceptions          对编译时检测到的隐式异常启用警告。
--warn-unusual-code                  对编译时检测到的异常代码启用警告。
--assume-yes-for-downloads          如果需要,允许Nuitka下载外部代码,例如依赖walker、ccache,甚至Windows上的gcc。要禁用,请重定向来自nul设备的输入,例如"</dev/null""<nul:"。默认为提示。
--nowarn-mnemonic=MNEMONIC          禁用给定助记符的警告。这些是为了确保你了解某些主题,通常指向Nuitka网站。助记符是URL末尾的一部分,没有HTML后缀。可以多次给定并接受shell模式。默认为空。

编译后立即执行
--run                           立即执行创建的二进制文件(或导入编译后的模块)。默认为关闭。
--debugger                      在调试器内部执行,例如"gdb""lldb",以自动获取堆栈跟踪。默认为关闭。
--execute-with-pythonpath          使用"--run"立即执行创建的二进制文件或模块时,不要重置"PYTHONPATH"环境。当所有模块都成功包含在内时,您应该不再需要PYTHONPATH,而且绝对不需要独立模式。

编译选项
--user-package-configuration-file=YAML_FILENAME       用户提供的带有包配置的Yaml文件。您可以包括DLL、删除膨胀、添加隐藏的依赖项。有关要使用的格式的完整说明,请参阅《用户手册》。可以多次给定。默认为空。
--full-compat                                       强制执行与CPython的绝对兼容性。甚至不允许与CPython行为发生微小偏差,例如,没有更好的回溯或异常消息,这些消息并非真正不兼容,只是不同或更糟。这仅用于测试,不应使用。
--file-reference-choice=MODE                           选择"__file__"的值。对于"运行时"(独立二进制模式和模块模式的默认值),创建的二进制文件和模块,使用其自身的位置来扣除"__file___"的值。包含的包假装在该位置下方的目录中。这允许您在展开中包含数据文件。如果您只是寻求加速,最好使用"原始"值,即将使用源文件位置的值。在"冻结"的情况下,会使用符号"<冻结模块名称>"。出于兼容性原因,"__file__"值将始终具有".py"后缀,而与实际值无关。
--module-name-choice=MODE                              选择"__name__""__package__"的值。使用"运行时"(模块模式的默认值),创建的模块使用父包来推导"__package __"的数值,以完全兼容。值"original"(其他模式的默认值)允许进行更多的静态优化,但与通常可以加载到任何包中的模块不兼容。

输出选项
--output-filename=FILENAME          指定应如何命名可执行文件。对于扩展模块没有选择,对于独立模式也没有选择,使用它将是一个错误。这可能包括需要存在的路径信息。在此平台上默认为"<program_name>"。执行
--output-dir=DIRECTORY                 指定中间输出文件和最终输出文件的放置位置。DIRECTORY将填充构建文件夹、dist文件夹、二进制文件等。默认为当前目录。
--remove-output                     生成模块或exe文件后删除生成目录。默认为关闭。
--no-pyi-file                       不要为Nuitka创建的扩展模块创建".piy"文件。这用于检测隐式导入。默认为关闭。

调试功能
--debug                                                                 在Nuitka中执行所有可能的自检以查找错误,不用于生产。默认为关闭。
--unstripped                                                            在生成的对象文件中保留调试信息,以便更好地进行调试器交互。默认为关闭。
--profile                                                               启用基于vmprof的花费时间分析。当前不工作。默认为关闭。
--internal-graph                                                           创建优化过程内部的图形,不用于整个程序,而仅用于小型测试用例。默认为关闭。
--trace-execution                                                       跟踪执行输出,在执行之前输出代码行。默认为关闭。
--recompile-c-only                                                      这不是增量编译,而是仅用于Nuitka开发。获取现有文件,然后简单地将它们重新编译为C。允许编译经过编辑的C文件,以便快速调试对生成的源代码的更改,例如查看是否传递了代码、值输出等,默认为关闭。取决于编译Python源代码来确定应该查看哪些文件。
--xml=XML_FILENAME                                                      将内部程序结构、优化结果以XML形式写入给定的文件名。
--generate-c-only                                                       只生成C源代码,不将其编译为二进制或模块。这是为了调试和代码覆盖率分析,不会浪费CPU。默认为关闭。不要认为您可以直接使用此选项。
--experimental=FLAG                                                     使用声明为"实验性"的功能。如果代码中没有实验特性,则可能没有任何效果。每个实验功能都使用秘密标签(检查源)。
--low-memory                                                            通过分叉更少的C编译作业和使用使用更少内存的选项,尝试使用更少的内存。用于嵌入式机器。在内存不足的情况下使用此选项。默认为关闭。
--create-environment-from-report=CREATE_ENVIRONMENT_FROM_REPORT         在给定的报告文件的不存在路径中创建一个新的virtualenv,例如"--report=compilation-report.xml"。默认情况下未完成。

后端C编译器选择
--clang                         强制使用叮当声。在Windows上,这需要一个工作的Visual Studio版本才能搭载。默认为关闭。
--mingw64                       在Windows上强制使用MinGW64。除非使用带有MinGW Python的MSYS2,否则默认为禁用。
--msvc=MSVC_VERSION             在Windows上强制使用特定的MSVC版本。允许的值是例如"14.3"MSVC 2022)和其他MSVC版本号,指定"list"作为已安装编译器的列表,或使用"latest"。如果已安装,则默认为使用的最新MSVC,否则使用MinGW64。
--jobs=N                        指定允许的并行C编译器作业数。默认为系统CPU计数。
--lto=choice                    使用链接时间优化(MSVC、gcc、clang)。允许的值有"是""否""自动"(当已知有效时)。默认为"自动"--static-libpython=choice         使用Python的静态链接库。允许的值有"是""否""自动"(当已知有效时)。默认为"自动"。

缓存控制
--disable-cache=DISABLED_CACHES         禁用选定的缓存,为所有缓存指定"all"。当前允许的值为:"all""ccache""bytecode""dll dependencies"。可以多次给定,也可以使用逗号分隔的值。默认为无。
--clean-cache=CLEAN_CACHES                 在执行之前清除给定的缓存,为所有缓存指定"all"。当前允许的值为:"all""ccache""bytecode""dll dependencies"。可以多次给定,也可以使用逗号分隔的值。默认为无。
--disable-bytecode-cache                 不要重复使用作为字节码包含的模块的依赖性分析结果,特别是来自标准库的依赖性。与--disable-cache=字节码相同。
--disable-ccache                        不要尝试使用ccache(gcc、clang等)或clcache(MSVC、clangcl)。与--disable-cache=cache相同。
--disable-dll-dependency-cache             禁用依赖项助行器缓存。将导致创建分发文件夹的时间更长,但可能会在怀疑缓存会导致错误的情况下使用。与--disable-cache=dll-依赖项相同。
--force-dll-dependency-cache-update     用于更新依赖项助行器缓存。将导致创建分发文件夹的时间更长,但可能会用于怀疑缓存会导致错误或已知需要更新的情况。

PGO编译选项
--pgo                               通过首先为分析运行执行专用构建,然后使用结果反馈到C编译中,启用C级配置文件引导优化(PGO)。注意:这是实验性的,还不适用于Nuitka的独立模式。默认为关闭。
--pgo-args=PGO_ARGS                 在配置文件引导优化的情况下要传递的参数。在PGO分析运行期间,这些文件被传递给特殊构建的可执行文件。默认为空。
--pgo-executable=PGO_EXECUTABLE     收集配置文件信息时要执行的命令。仅当您需要通过准备运行的脚本启动它时才使用此选项。默认使用创建的程序。

跟踪功能
--report=REPORT_FILENAME         XML输出文件中的报表模块、数据文件、编译、插件等详细信息。这对于问题报告也非常有用。例如,这些报告可以用于重新创建环境,使用"--从报告创建环境"很容易,但包含大量信息。默认为禁用。
--report-template=REPORT_DESC     通过模板进行报告。提供模板和输出文件名"template.rst.j2:output.rst"。对于内置模板,请查看《用户手册》中的内容。可以多次给定。默认值为空。
--quiet                         禁用所有信息输出,但显示警告。默认为关闭。
--show-scons                    使用详细信息运行C构建后端Scons,显示执行的命令和检测到的编译器。默认为关闭。
--no-progressbar                禁用进度条。默认为off.ted编译器。默认为关闭。
--show-progress                 过时:提供进度信息和统计数据。禁用正常进度条。默认为关闭。
--show-memory                   提供内存信息和统计信息。默认为关闭。
--show-modules                  提供包含的模块和DLL的信息已过时:应改用"--report"文件。默认为关闭。
--show-modules-output=PATH         输出"--show modules"的位置应为文件名。默认为标准输出。
--verbose                       输出所采取操作的详细信息,特别是在优化中。可以变得很多。默认为关闭。
--verbose-output=PATH"--verbose"输出的位置应该是一个文件名。默认为标准输出。

操作系统通用选项
--disable-console                           为Windows或macOS编译时,请禁用控制台窗口并创建GUI应用程序。默认为关闭。
--enable-console                            为Windows或macOS编译时,请启用控制台窗口并创建控制台应用程序。这会禁用某些模块的提示,例如建议禁用它的"PySide"。默认值为true--force-stdout-spec=FORCE_STDOUT_SPEC       强制程序的标准输出到此位置。适用于禁用控制台的程序和使用Nuitka商业版Windows服务插件的程序。默认为非活动,例如使用"%PROGRAM%.out.txt",即程序附近的文件。
--force-stderr-spec=FORCE_STDERR_SPEC       强制程序的标准错误到此位置。适用于禁用控制台的程序和使用Nuitka商业版Windows服务插件的程序。默认为非活动,例如使用"%PROGRAM%.err.txt",即程序附近的文件。

Windows特定控件
--windows-icon-from-ico=ICON_PATH                                 添加可执行文件图标。对于不同的分辨率或内部有多个图标的文件,可以多次给定。在后面的情况下,您还可以使用#<n>后缀,其中n是从1开始的整数索引,指定要包括的特定图标,以及要忽略的所有其他图标。
--windows-icon-from-exe=ICON_EXE_PATH                             从此现有可执行文件复制可执行文件图标(仅限Windows)。
--onefile-windows-splash-screen-image=SPLASH_SCREEN_IMAGE         为Windows和onefile编译时,请在加载应用程序时显示此信息。默认为关闭。
--windows-uac-admin                                             请求Windows用户控制,以在执行时授予管理员权限。(仅限Windows)。默认为关闭。
--windows-uac-uiaccess                                             请求Windows用户控制,以强制仅从几个文件夹运行,远程桌面访问。(仅限Windows)。默认为关闭。

macOS特定控件
--macos-target-arch=MACOS_TARGET_ARCH             这应该在什么架构上运行。默认和限制是运行Python所允许的。默认值为"native",这是运行Python的体系结构。
--macos-create-app-bundle                         为macOS编译时,请创建捆绑包,而不是纯二进制应用程序。目前是实验性的和不完整的。目前,这是解锁控制台禁用的唯一方法。默认为关闭。
--macos-app-icon=ICON_PATH                         添加要使用的应用程序捆绑包的图标。只能给出一次。默认为Python图标(如果可用)。
--macos-signed-app-name=MACOS_SIGNED_APP_NAME     用于macOS签名的应用程序的名称。遵循"com.YourCompany.AppName"命名结果以获得最佳结果,因为这些结果必须是全局唯一的,并且可能会授予受保护的API访问权限。
--macos-app-name=MACOS_APP_NAME                 要在macOS捆绑包信息中使用的产品的名称。默认为二进制文件的基本文件名。
--macos-app-mode=MODE                             应用程序捆绑包的应用程序模式。当启动一个窗口,并希望出现在Docker中时,默认值"gui"非常适合。如果没有Window,应用程序就是一个"后台"应用程序。对于稍后显示的UI元素,"UI元素"介于两者之间。该应用程序不会出现在dock中,但在以后打开窗口时可以完全访问桌面。
--macos-sign-identity=MACOS_APP_VERSION         在macOS上登录时,默认情况下将使用特别标识,但通过此选项,您可以指定另一个要使用的标识。代码的签名现在在macOS上是强制性的,不能被禁用。如果未给出,则默认为"特别"--macos-sign-notarization                         在签署公证时,使用苹果公司的正确TeamID身份,使用所需的运行时签名选项,以便可以接受。
--macos-app-version=MACOS_APP_VERSION             要在macOS捆绑包信息中使用的产品版本。如果未给定,则默认为"1.0"--macos-app-protected-resource=RESOURCE_DESC     请求访问macOS保护资源的权限,例如"NSMicrophoneUsageDescription:Microphone access for recording audio"。请求访问麦克风并为用户提供信息文本,说明为什么需要这样做。冒号之前是访问权限的操作系统标识符,然后是信息文本。法律价值可在https://developer.apple.com/documentation/bundleresources/information_property_list/p protected_resources和该选项可以指定多次。默认为空。

Linux特定控件
--linux-icon=ICON_PATH         为要使用的onefile二进制文件添加可执行图标。只能给出一次。默认为Python图标(如果可用)。

二进制版本信息
--company-name=COMPANY_NAME             要在版本信息中使用的公司的名称。默认为未使用。
--product-name=PRODUCT_NAME             要在版本信息中使用的产品的名称。默认为二进制文件的基本文件名。
--file-version=FILE_VERSION             要在版本信息中使用的文件版本。必须是最多4个数字的序列,例如1.01.0.0.0,不允许再有数字,不允许有字符串。默认为未使用。
--product-version=PRODUCT_VERSION         要在版本信息中使用的产品版本。与文件版本的规则相同。默认为未使用。
--file-description=FILE_DESCRIPTION     版本信息中使用的文件的说明。此时仅限Windows。默认为二进制文件名。
--copyright=COPYRIGHT_TEXT                 版本信息中使用的版权。此时仅限Windows。默认为不存在。
--trademarks=TRADEMARK_TEXT             版本信息中使用的版权。此时仅限Windows。默认为不存在。

插件控件
--enable-plugin=PLUGIN_NAME         已启用插件。必须是插件名称。使用"--plugin-list"查询完整列表并退出。默认为空。
--disable-plugin=PLUGIN_NAME         禁用的插件。必须是插件名称。使用"--plugin-list"查询完整列表并退出。大多数标准插件都不是禁用的好主意。默认为空。
--plugin-no-detection                 插件可以检测它们是否可能被使用,您可以通过"--disable-plugin=plugin-that warnings"禁用警告,也可以使用此选项完全禁用该机制,这当然也会稍微加快编译速度,因为一旦您确定要使用哪些插件,此检测代码就会徒劳运行。默认为关闭。
--plugin-list                       显示所有可用插件的列表并退出。默认为关闭。
--user-plugin=PATH                  用户插件的文件名。可以多次给定。默认为空。
--show-source-changes                 在编译之前显示对原始Python文件内容的源代码更改。主要用于开发插件。默认为False。

支持插件列表:
 anti-bloat        修补愚蠢的从广泛使用的库模块中导入的源代码。
 data-files        包括包配置文件指定的数据文件。
 delvewheel        需要在独立模式下使用包来"支持"delewheel。
 dill-compat       "dill"包兼容性所需。
 dll-files         根据程序包配置文件包括DLLenum-compat       Python2和'enum'包需要。
 eventlet          支持包含"eventlet"依赖项及其对"dns"包monkey补丁的需求。
 gevent            "gevent"包所需。
 gi                支持GI包typelib依赖项。
 glfw              OpenGL和"glfw"软件包在独立模式下需要。
 implicit-imports  根据包配置文件提供包的隐式导入。
 kivy              "kivy"包所需。
 matplotlib        "matplotlib"模块需要。
 multiprocessing   Python的"多处理"模块所需。
 no-qt             禁用独立模式的所有Qt绑定。
 options-nanny     根据软件包配置文件通知用户潜在的问题。
 pbr-compat        "pbr"包在独立模式下需要。
 pkg-resources     "pkg_resources"的解决方案。
 pmw-freezer       "Pmw"包所需。
 pylint-warnings   支持PyLint/PyDev linting源标记。
 pyqt5             PyQt5软件包所需。
 pyqt6             PyQt6包在独立模式下所需。
 pyside2           PySide2程序包所需。
 pyside6           PySide6包在独立模式下需要。
 pywebview         "webview"包(PyPI上的pywebview)所需。
 tk-inter          Python的Tk模块所需。
 trio              "trio"套餐所需。
 upx               使用UPX自动压缩创建的二进制文件。

anti-bloat插件选项
--show-anti-bloat-changes                                     注释插件所做的更改。
--noinclude-setuptools-mode=NOINCLUDE_SETUPTOOLS_MODE         如果遇到"setuptools"或导入,该怎么办。这个包可能有很大的依赖性,绝对应该避免。还处理"setuptools_scm"--noinclude-pytest-mode=NOINCLUDE_PYTEST_MODE                 如果遇到"pytest"导入,该怎么办。这个包可能有很大的依赖性,绝对应该避免。还处理"鼻子"进口。
--noinclude-unittest-mode=NOINCLUDE_UNITTEST_MODE             如果遇到单元测试导入,该怎么办。这个包可能有很大的依赖性,绝对应该避免。
--noinclude-IPython-mode=NOINCLUDE_IPYTHON_MODE             如果遇到IPython导入,该怎么办。这个包可能有很大的依赖性,绝对应该避免。
--noinclude-dask-mode=NOINCLUDE_DASK_MODE                     如果遇到"dask"导入,该怎么办。这个包可能有很大的依赖性,绝对应该避免。
--noinclude-numba-mode=NOINCLUDE_NUMBA_MODE                 如果遇到"numba"导入,该怎么办。这个包可能很大,有依赖项,并且目前不适用于单机版。这个包很大,有依赖关系,应该避免使用。
--noinclude-default-mode=NOINCLUDE_DEFAULT_MODE             这实际上为上述选项提供了默认的"警告"值,并可用于打开所有这些选项。
--noinclude-custom-mode=CUSTOM_CHOICES                         如果遇到特定导入,该怎么办。格式是模块名称,可以也应该是顶级包,然后选择一个选项,"error""warning""nofollow",例如PyQt5:error。
代码Obfuscator混淆

借助oxyry在线网站实现obfuscator混淆

在线地址:https://pyob.oxyry.com/

image
image

参考:https://blog.csdn.net/weixin_44786530/article/details/144233911 https://blog.csdn.net/LEILEI18A/article/details/136397703 https://baijiahao.baidu.com/s?id=1777902041805714667&wfr=spider&for=pc https://www.jianshu.com/p/6da5a769ad71

python代码打包和逆向:https://saucer-man.com/information_security/825.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-04-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
网络直播管理办法解读:不可忽略的十五大原则
 杨  乐  腾讯研究院副秘书长        刘笑岑  腾讯研究院高级研究员         邱少林  腾讯公司高级法律顾问   2016年12月13日,文化部《网络表演经营活动管理办法》(以下简称《办法》)正式公布,2017年1月1日起施行。此前网信办、国家新闻出版广电总局、文化部都出台了关于网络直播的规范性文件,有什么区别,怎么综合把握?对直播业务将产生哪些影响,一一分析如下:   一、三个部门出台了哪些规定,有什么区别?   网信办、广电总局、文化部分别出台了关于网络直播的4个规范性
腾讯研究院
2018/02/06
7.9K0
微信小程序注册认证文档[通俗易懂]
温馨提示: 1)腾讯官方收到打款后会在小信封通知对应审核公司名称及联系方式; 2)审核过程中若有问题,审核公司会主动联系运营者。
全栈程序员站长
2022/07/28
6.6K0
微信小程序注册认证文档[通俗易懂]
ICP经营许可证怎么办理?
​这是一篇最全面最权威的关于ICP经营许可证怎么办理的文章,基本上汇聚了知乎ICP经营许可证的办理答案的所有精华!先收藏起来,记得点个赞哦~
众森企服
2024/06/14
1K0
ICP经营许可证怎么办理?
互联网新闻新规解读,实施12载首次大修释放哪些信号?
杨乐 腾讯研究院副秘书长 博士后   5月2日,国家网信办发布《互联网新闻信息服务管理规定》(2017年1号令),将于6月1日起施行。该规定是对2005年37号令的修订完善。从2005至2017年,12年一轮回,PC互联网全面过渡到移动互联网,信息技术更替、产业格局已然不同,立法需做出回应。规定修订前后历经5年,数易其稿,对未来一段时间的互联网新闻传播法治秩序具有重要意义。 01   互联网新闻资质种类有哪些?   2005年37号令把新闻资质分为三类,(一)新闻单位设立的登载超出本单位已刊登播发
腾讯研究院
2018/02/01
1K0
浅谈ICP备案、网站备案、域名备案、ICP经营许可证~
如果你在中国境内搭建过网站,一定经历过网站备案,那么为什么要进行网站备案,它是必须的吗?ICP备案、网站备案、域名备案之间又有什么关系呢?ICP经营许可证又是个什么东西?下面为你逐个解答~
小晟
2023/04/11
40K1
企业大模型服务合规指南:深度解析备案与登记​​
伴随AI技术的爆炸式发展,尤其是大模型(LLM)在各行各业的深度应用和整合,企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者,还是积极拥抱AI转型的传统企业,在面向公众提供基于大模型的智能服务时,​​合规运营​​已成为可持续发展的生命线。确保服务符合监管要求,避免被“下架”的关键举措之一,就是完成大模型服务的备案或登记。本文将为您详细梳理企业该如何判断自身情况、准备材料并完成备案/登记流程。
老赵聊算法、大模型备案
2025/06/10
3270
企业大模型服务合规指南:深度解析备案与登记​​
腾讯云网站备案咨询解答:如何进行备案
在腾讯云备案网站过程中难免会遇到这样那样的问题,幸好老魏总结了一部分答案,可以帮助大家顺利过关。现在分享出来,希望对正在备案中或者打算要备案的你有用。
魏艾斯博客www.vpsss.net
2019/10/17
19.4K0
腾讯云网站备案咨询解答:如何进行备案
网站公安备案流程及详细操作说明最新版
根据《中华人民共和国计算机信息系统安全保护条例》以及《计算机信息网络国际联网安全保护管理办法》的相关规定,开办网站必须到当地公安机关网安部门办理备案手续(网上办理),并且在自网络正式联通后的三十日内办理,如果不履行,公安机关会给予警告或者停机整顿不超过六个月的处罚。
众森企服
2024/04/10
7.7K0
网站公安备案流程及详细操作说明最新版
全网最全面最详细关于ICP许可证办理指南
在这个网络的时代,几乎每个企业都有自己的门户网站。上线一个网站很容易,开发好上线就可以,但并不是这样就完了。后面还有许多事情要做,比如需要办理各类许可资质。
众森企服
2022/04/03
12.3K0
全网最全面最详细关于ICP许可证办理指南
详细!完成备案需要多久时间?国内网站备案流程与步骤
  上一篇文章主要讲解了WordPress主题的设置,距离完成一个完整的个人网站搭建还差最后一步。
IT学习日记
2022/09/13
18.1K1
详细!完成备案需要多久时间?国内网站备案流程与步骤
一文搞懂什么是算法备案?算法备案全攻略!
算法备案是指互联网平台运营者按照相关法律法规要求,将其提供的算法推荐服务的相关信息向主管部门进行登记备案的行为。备案内容涵盖算法的基本信息、技术原理、应用场景等,旨在规范算法推荐服务,保护用户权益,维护网络空间秩序。
用户2419601
2025/05/29
1500
一文搞懂什么是算法备案?算法备案全攻略!
大模型备案、登记全流程教程
在AI浪潮汹涌澎湃的当下,大模型技术犹如雨后春笋般竞相涌现,为各行业注入了前所未有的变革活力。为了不让算法无序发展,在安全的前提下,需要做相关的备案登记工作。
老赵聊算法、大模型备案
2025/01/18
2K0
白杨SEO:网站备案是什么?为什么重要?网站备案操作流程
你也许要问:这个网站备案到底是指域名如http://baiyangseo.com还是域名所绑定的服务器空间要备案?
白杨SEO
2023/05/05
5.5K0
白杨SEO:网站备案是什么?为什么重要?网站备案操作流程
大模型备案和互联网算法备案的区别?
最近,接到很多客户的电话咨询大模型备案和互联网算法备案,好多人搞不清楚这两个有什么关系?有什么区别?我们先来看下全国大模型备案和互联网算法备案通过的情况是怎么样的?
众森企服
2024/04/19
1.1K0
大模型备案和互联网算法备案的区别?
网络文化经营许可证全攻略!快收藏
什么是网络文化经营许可证? 《网络文化经营许可证》,简称“文网文”。是指经文化行政部门和电信管理机构批准,颁发给从事经营性互联网文化活动的互联网信息服务提供者的市场合法准入资质;其中经营性互联网文化活动是指以营利为目的,通过向上网用户收费或者电子商务、广告、赞助等方式获取利益,提供互联网文化产品及其服务的活动。 哪些文化产品类型,需要办理? 1、游戏产品运营、产品运营(含虚拟货币发行)、虚拟货币交易; 2、表演类:如YY直播,花椒直播等; 3、动画动漫类:指的是动画产品和漫画产品; 4、音乐娱乐类:如音乐门
腾讯云DNSPod团队
2022/03/04
2K0
微信团队:9月1日起微信小程序须完成备案后才可上架
微信公众平台运营中心表示,开发者需依法履行备案手续,未按要求履行备案手续的,微信小程序不得开展业务,平台不提供上架服务。为了配合相关部门做好移动互联网信息服务管理,微信公众平台ICP代备案管理系统将提供新增备案、变更备案、注销备案等服务,协助开发者完成微信小程序备案。
李洋博客
2023/10/13
7930
微信团队:9月1日起微信小程序须完成备案后才可上架
什么是ICP、ICP证、ICP备案 又有什么关系?
  CP是什么意思呢?相信大多站长并不清楚ICP是什么意思,就算是网站已经备案的也不了解ICP到底为何物。大家往往搞不清楚ICP备案和ICP证之间的区别。今天小编为大家讲解一下ICP是什么意思,ICP
苏子
2019/02/27
26.3K2
什么是ICP、ICP证、ICP备案 又有什么关系?
原备案在腾讯云 如何操作新增网站备案
备案主体已在腾讯云办理过备案,现要新增网站,则需进行新增网站(原备案在腾讯云)操作。
魏艾斯博客www.vpsss.net
2019/10/14
18.2K0
原备案在腾讯云 如何操作新增网站备案
一点资讯拿证了!“无证裸奔”的新闻客户端们何去何从?
近日,以个性化推荐起家的资讯平台一点资讯刚刚拿到《互联网新闻信息服务许可证》,这是在今年5月,国家网信办发布《互联网新闻信息服务许可管理实施细则》以来,第一批发放《互联网新闻信息服务许可证》,与一点资
罗超频道
2018/04/25
1.3K0
一点资讯拿证了!“无证裸奔”的新闻客户端们何去何从?
ICP经营许可证怎么申请
人们的生活因为互联网变得越来越方便,互联网上的商机也是非常的多。根据国家相关政策规定,企业上线经营性网站,需办理ICP经营许可证。
用户4551582
2019/02/19
4.8K2
ICP经营许可证怎么申请
推荐阅读
相关推荐
网络直播管理办法解读:不可忽略的十五大原则
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档