如何为py2exe分发创建清单文件?

时间:2013-10-24 22:13:29

标签: python py2exe

我正在使用py2exe分发python应用程序。解压缩时,除了主exe文件外,发行版还包含一些dll,配置文件等。我想添加一个清单文件,包含在发行版中。此文件将列出所有必需文件(dll,配置文件)和每种文件的某种加密哈希值,这样,如果文件被篡改,则无法运行主可执行文件。

我可以编写一个脚本来在构建期间生成文件,然后在运行应用程序时从python中检查这个文件。但是,看起来这应该是常见的事情,那么这项工作是否有任何工具?

1 个答案:

答案 0 :(得分:1)

尽管可能有在线工具可以执行此操作,但您可能只需在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,
)