Windows 上的 Python 脚本分发 - 避免病毒误报的选项?

Posted

技术标签:

【中文标题】Windows 上的 Python 脚本分发 - 避免病毒误报的选项?【英文标题】:Python script distribution on Windows - options to avoid virus false positives? 【发布时间】:2021-11-09 14:25:18 【问题描述】:

在 Windows 上将 .py 脚本转换为 .exe 似乎总是会导致误报病毒检测命中。

在 *** 和其他地方有很多关于此的讨论线程。一个真正好的总结是here。

来自 pip 的 pyinstaller、带有本地编译引导加载程序的 pyinstaller、py2exe 和 nuitka 是迄今为止我尝试过的各种 .exe 构建器。各种构建工具会导致 virustotal.com 上的点击次数不同,但无论您做什么,似乎总会有一些点击 - 这就是我们生活的世界。

我知道签名是一种选择,虽然分发的工具是免费和开源的,所以可能不会采用签名选项。

每次编辑脚本和重建 .exe 时都追查防病毒供应商报告误报似乎不是很好地利用时间。

这里的问题是:最好放弃分发 .exe 的想法吗?在最终用户的机器上安装完整的 python,然后分发 .py 文件是最好的方法吗?该选项似乎非常重量级和霸道,并且容易出现更多安装问题。但是,如果这是避免杀毒舞会的唯一方法......?还是有其他中间选项?

【问题讨论】:

这似乎是一个基于意见的问题? 我认为一个很大的可能部分(因为我个人没有遇到这个问题)是代码的某些部分,在某些库中。但我想我还不确定对此发表声明。 @Mahrkeenerh 我不这么认为,因为它提出了一个明确的问题(“我如何避免误报”),但措辞可以做一些工作.. 我之前也没有出现过病毒错误(在多台机器上)。只有一个有问题,所以也可能是基于反恶意软件的? 你不能。防病毒软件使用启发式方法来检测程序的可疑行为知名程序的白名单。当然,您的 pyinstaller 生成的程序也不可能成为众所周知的程序。因此,如果它设法触发启发式规则,那么您就离开了...... 【参考方案1】:

这可能是最好的选择:使用从 python.org 下载的可嵌入包。官方文档说明了in the second half of section 4.4.1 of 'Using Python on Windows'。

在他们的下载页面中,选择版本后,你可以进入类似this (for python 3.10)的页面:

根据需要下载 32 或 64 的“Windows 可嵌入包”。假设您将下载的 zip 解压缩到 $MYDIR。然后运行你的python脚本,例如从 Windows 批处理文件中,你可以有一行像

调用 $MYDIR\python.exe myscript.py

在 virustotal.com 上检测到 $MYDIR\python.exe 的威胁为零,因为它是已知且已签名且受信任且未经修改的。可以肯定的是,我对包含批处理文件、myscript.py 和 $MYDIR 的整个目录进行了 Windows 扫描 - 未检测到威胁。

到目前为止,此流程似乎适用于此应用程序。将等待接受这个答案,直到它已经工作了几天。

下载的 32 位可嵌入包为 7.1MB,解压后为 15.6MB - 不大,也不小,但对于这个特定的应用程序来说足够小了。

有没有人使用过这种嵌入式软件包解决方案,并且可能知道任何警告或陷阱?

【讨论】:

谢谢,这个解决方案对我有用。 n+=1,这是解决它的方法。

以上是关于Windows 上的 Python 脚本分发 - 避免病毒误报的选项?的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 上编译+分发 Linux 代码

Shebang Notation:Windows 和 Linux 上的 Python 脚本?

使用 cx_freeze 在 Mac、Linux 和 Windows 上分发 python:我可以从一个平台生成所有应用程序吗?

在 Windows 中安装 Python 包

如何分发我的 python 桌面应用程序?

如何使用运行 Windows .exe 的 Python 脚本链接到 conda 环境中的 .dll?