我正在使用 py2exe 分发一个 python 应用程序。解压后,除了主 exe 文件外,该发行版还包含一些 dll、配置文件等。我想添加一个清单文件以包含在发行版中。该文件将列出所有必需的文件(dll、配置文件)和每个文件的某种加密哈希,因此如果文件被篡改,主可执行文件将无法运行。
我可以编写一个脚本来在构建期间生成文件,然后在运行应用程序时从 python 中检查这个文件。但是,这似乎应该是一件常见的事情,那么是否有任何工具可以完成这项工作?
尽管可能有在线工具可以执行此操作,但您可能只需将一些代码添加到您的 python 编译器程序中。此解决方案可能不是最好或最干净的解决方案,但它应该可以工作。您可以通过以非 zip 格式编译一次并列出文件来了解将创建哪些 dll 文件和类似的依赖项。您可以在 python 程序中添加代码以检查这些文件是否存在,然后使用修改后的 python 程序再次编译它,但仍然没有 zipfile。您可以通过将字符串打印到以写入模式打开的新文件中来在所有依赖项所在的 dist 目录中创建一个索引文件,然后您可以使用 python 模块 zipfile 手动压缩该目录。
您可能想要的一种更简单的替代方法是将所有这些依赖项捆绑到一个 exe 文件中。你可以这样做,这个包含许多额外的选项,可以在原始输入中添加到 exe 文件中:
from distutils.core import setup
import py2exe, sys, os
sys.argv.append('py2exe')
setup(
options = {'py2exe': {'bundle_files': 1, 'compressed': True}},
windows = [{'script': raw_input("input filename: "),
"icon_resources": [(1, raw_input("iconfilename: "))]
}],
name = raw_input("enter program name: "),
version = raw_input("enter version: "),
description = raw_input("enter description: "),
author = raw_input("enter author: "),
author_email = raw_input("enter author email: "),
maintainer = raw_input("enter maintainer: "),
maintainer_email = raw_input("enter maintainer email: "),
url = raw_input("enter url: "),
zipfile = None,
)