如何让py2exe包含版权信息构建

7 投票
5 回答
4115 浏览
提问于 2025-04-17 22:12

我正在使用Py2exe把我的Python脚本变成一个Windows的.exe文件。我想在这个文件里加入版权信息,还有产品版本、描述等内容。我已经成功地把所有信息都显示出来了(在.exe的属性 > 详细信息里),除了版权信息。我尝试了以下方法,但都没有成功:

from distutils.core import setup
import py2exe
import sys

if len(sys.argv) == 1:
    sys.argv.append("py2exe")
    sys.argv.append("-q")

class Target:
    def __init__(self, **kw):
        self.__dict__.update(kw)
        # for the versioninfo resources
        self.version = "1.0.0.0"
        self.company_name = "ACME."
        self.copyright = "Copyright (c) 2014 ACME."
        self.name = "My Program"

# create an instance of class Target
# and give it additional needed info
target = Target(
    description = "Test Description",
    # this is your code file
    script = "Main.py",
    # this will form TestProgram.exe
    dest_base = "TestProgram")

setup(
    options = {'py2exe': {'bundle_files': 1,
                          'compressed': 1}},
    console = [{'script': "Main.py"}],
    zipfile = None,
)

使用这个方法后,我在.exe的属性 > 详细信息里看到了文件描述、产品名称和产品版本,但就是缺少版权信息。

5 个回答

0

谢谢你,mbokil。这个对我来说很好用。

信息:py2exe将停止对设置API的支持,建议用户开始使用py2exe.freeze API来构建独立的.exe文件,也就是可以单独运行的程序文件。

0

更新于2023年。现在有一个新的 freeze API,这是编译你代码的新方法。我发现这是我在使用Python 3.11及以上版本时,唯一能可靠地让版权和产品版本显示出来的方法。

from py2exe import freeze
 
freeze(
   console = [myservice],
   zipfile = None,
   options = {'bundle_files': 3,'compressed': 1},
   version_info={
      'version':'1.0.0',
      'product_version':'03012023',
      'product_name':'My Service',
      'copyright':'Copyright 2023 My Company',
   }
)
1

我觉得你的代码有些问题,因为它没有更新exe文件中的文件描述、产品名称和产品版本。不过,下面这段代码可以做到:

from distutils.core import setup
import py2exe

setup(
    options = {'py2exe': {'bundle_files': 1,
                          'compressed': 1}},
    console = [{'script': "Main.py"}],
    zipfile = None,
    version = "1.0.0.0",
    name = "My Program",
    description = "Test Description",
)

把公司名称和版权信息放进可执行文件里要复杂一些,遗憾的是,我还不知道怎么做。这个链接可能会对你有帮助。

3

user2643864的回答比实际需要的要复杂。jgritty的回答差不多正确,只需要简单修改一下,往分配给console的字典里添加几个条目就行:

from distutils.core import setup
import py2exe

setup(
    options = {'py2exe': {'bundle_files': 1,
                          'compressed': 1}},
    console = [{
        'script': 'Main.py',
        'copyright': 'Copyright (C) 2016 ACME Pty Ltd',
        'company_name': 'ACME Pty Ltd',
    }],
    zipfile = None,
    version = '1.0.0.0',
    name = 'My Program',
    description = 'Test Description',
)
6

我把下面的内容搞定了。我意识到我没有正确设置目标。在最后我修正了这个问题,做了 console = [target]

from distutils.core import setup
import py2exe
import sys

if len(sys.argv) == 1:
    sys.argv.append("py2exe")
    sys.argv.append("-q")

class Target:
    def __init__(self, **kw):
        self.__dict__.update(kw)
        self.version = "1.0.0.0"
        self.company_name = "ACME."
        self.copyright = "Copyright (c) 2014 ACME."
        self.name = "My Program"

target = Target(
    description = "Test Description",
    script = "Main.py",
    dest_base = "TestProgram")

setup(
    options = {'py2exe': {'bundle_files': 1,
                          'compressed': True}},
    zipfile = None,
    console = [target]
)

撰写回答