有没有办法更新用 cx_freeze 创建的应用程序?

如何解决有没有办法更新用 cx_freeze 创建的应用程序?

我使用 cx_freeze 为我的 Python 项目创建并分发了一个 msi 文件。我在项目中做了一些更改,比如说 v2.0。无论如何,我可以更新客户端计算机中的应用程序而无需再次发送 msi 吗?

或者我可以使用其他任何包装库来让我这样做吗?

解决方法

您可以使用 MSI 升级代码来升级您的应用程序。查看 Create an upgradeable msi file with cx_Freeze 以供参考。

首先,您需要为升级代码创建一个 UUID (GUID):

import uuid str(uuid.uuid3(uuid.NAMESPACE_DNS,'appname.orgname.org')).upper()

您只需将“appname.orgname.org”替换为合适的。

接下来,准备 setup.py

#Application information
name = 'memopad'
version = '1.0.0'
author = 'example'
author_email = 'sample@example.xxx'
url = 'http://example.xxx'
description = 'Text Editor'

#Specify the GUID here (basically it should not be changed)
upgrade_code = '{3F2504E0-4F89-11D3-9A0C-0305E82C3301}'
#For 64-bit Windows,switch the installation folder
# ProgramFiles(64)Folder seems to be replaced with the actual directory on the msi side
programfiles_dir = 'ProgramFiles64Folder' if distutils.util.get_platform() == 'win-amd64' else 'ProgramFilesFolder'

#Options to use with the build command on Windows
build_exe_options = {
    'packages': ['os'],'excludes': ['tkinter'],#Exclude tkinter as it is not used
    'includes': ['PySide.QtCore','PySide.QtGui','gui','commands'],'include_files': ['img/','lang/','license/'],'include_msvcr': True,#Since it uses PySide,it cannot be started unless Microsoft's C runtime is included.
    'compressed'   : True
}

# bdist_Options to use with the msi command
bdist_msi_options = {
    'upgrade_code': upgrade_code,'add_to_path': False,'initial_target_dir': '[%s]\%s\%s' % (programfiles_dir,author,name)
}

options = {
    'build_exe': build_exe_options,'bdist_msi': bdist_msi_options
}

#exe information
base = 'Win32GUI' if sys.platform == 'win32' else None
icon = 'img/app_icon.ico'

mainexe = Executable(
    'main.py',targetName = 'Memopad.exe',base = base,icon = icon,copyDependentFiles = True
)

setup(
    name=name,version=version,author=author,author_email=author_email,url=url,description=description,options=options,executables=[mainexe]
)

请注意,如果您更改了升级代码,将不会被视为同一个包,您将无法正确管理该包。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?