如何让py2exe包含版权信息构建
我正在使用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]
)