糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > (1)python pyinstaller打包exe添加版本信息(2)python获取exe版本信息(3)pyqt5开发exe

(1)python pyinstaller打包exe添加版本信息(2)python获取exe版本信息(3)pyqt5开发exe

时间:2020-10-19 23:33:03

相关推荐

(1)python pyinstaller打包exe添加版本信息(2)python获取exe版本信息(3)pyqt5开发exe

笔者总结不容易点个关注吧 一键三联哦! 感谢您!

python pyinstaller打包exe添加版本信息

打包并添加版本信息

注意!这里有个坑 如果第二次要修改版权信息 要将file_version_info.txt改为新的名称才生效

pyinstaller --version-filefile_version_info.txt-D -w -i .\favicon.ico .\getMusic.py

# UTF-8## For more details about fixed file info 'ffi' see:# /en-us/library/ms646997.aspxVSVersionInfo(ffi=FixedFileInfo(# filevers and prodvers should be always a tuple with four items: (1, 2, 3, 4)# Set not needed items to zero 0. filevers和prodvers应该始终是包含四个项的元组:(1、2、3、4),将不需要的项设置为0filevers=(1, 0, 0, 0), # 文件版本******,鼠标悬浮exe会显示,也显示在 详细信息-文件版本,这个是检测版本的依据prodvers=(1, 0, 0, 0), # 生产商,未见显示在哪里# Contains a bitmask that specifies the valid bits 'flags'rmask=0x3f, # 两个位掩码# Contains a bitmask that specifies the Boolean attributes of the file.flags=0x0,# The operating system for which this file was designed.# 0x4 - NT and there is no need to change it.OS=0x40004, # 为其设计此文件的操作系统,0x4-NT,无需更改它# The general type of file.# 0x1 - the file is an application.fileType=0x1, # 文件的常规类型,0x1-该文件是一个应用程序# The function of the file.# 0x0 - the function is not defined for this fileTypesubtype=0x0, # 文件的功能,0x0表示该文件类型未定义# Creation date and time stamp.date=(0, 0) # 创建日期和时间戳),kids=[StringFileInfo([StringTable(u'080404b0',[StringStruct(u'CompanyName', u'AND'), # 公司,鼠标悬浮exe会显示StringStruct(u'FileDescription', u'AND'), # 文件说明,鼠标悬浮exe会显示,也会显示在 详细信息-文件说明StringStruct(u'FileVersion', u'1.0.0.0'), # 没见哪里显示StringStruct(u'LegalCopyright', u'Copyright (C) AND'), # 版权,会显示在 详细信息-版权StringStruct(u'ProductName', u'AND'), # 原始文件名,会显示在 详细信息-原始文件名StringStruct(u'ProductVersion', u'1.0.0.0')]) # 产品版本,会显示在 详细信息-产品版本]),VarFileInfo([VarStruct(u'Translation', [2052, 1200])]) # 语言,中文简体])

如果想把语言转成中文,可以把VarFileInfo([VarStruct(u'Translation', [1033, 1200])])改成VarFileInfo([VarStruct(u'Translation', [2052, 1200])])

pyinstaller --version-filefile_version_info.txt-D -w -i .\favicon.ico .\getMusic.py

注意!这里有个坑 如果第二次要修改版权信息 要将file_version_info.txt改为新的名称才生效

运行后结果: 可以看到已经增加了版本信息

具体信息可以修改file_version_info.txt文件中的描述

右键详细信息:

python获取exe版本信息

python获取exe版本信息源代码如下:

# @CSDN王家视频教程图书馆# @Time -01-13 20:50from win32com.client import Dispatchdef get_version_via_com(filename):parser = Dispatch("Scripting.FileSystemObject")version = parser.GetFileVersion(filename)print(version)return versionif __name__ == "__main__":path1 = "C:/Users/xiangbin/Desktop/AA/AND/AND.exe"#这个exe没有版权信息path2 =r'C:\Users\xiangbin\PycharmProjects\pythonProject2\根据歌曲名称目录自动化批量下载歌曲\dist\getMusic\getMusic.exe'get_version_via_com(path2)

pyqt5开发exe添加检查版本更新功能

Python编程:paramiko模块远程登录-阿里云开发者社区

Python编程:paramiko模块远程登录-阿里云开发者社区

这篇文章末尾中点击:

请现在阿里云控制台生成秘钥 然后再导出点pem文件格式的秘钥

Paramiko的ssh模块使用无密码方式远程链接阿里云服务器

# @CSDN王家视频教程图书馆# @Time -01-13 20:50import paramiko# 公加pkey = paramiko.RSAKey.from_private_key_file('id_rsa')# 建立连接ssh = paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh.connect(hostname='39.106.155.202',port=22,username='root',pkey=pkey)# 执行命令stdin, stdout, stderr = ssh.exec_command('df -hl')# 结果放到stdout中,如果有错误将放到stderr中print(stdout.read().decode())# 关闭连接ssh.close()

问题:paramiko.ssh_exception.SSHException: Server '39.106.155.202' not found in known_hosts

解决:

允许连接不在know_hosts文件中的主机

ssh = paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

问题:paramiko.ssh_exception.AuthenticationException: Authentication failed.

这个问题笔者用了三个小时才解决(阿里云社区也没有讲清楚)

解决:

问题背景

在项目中会使用python中的Paramiko ssh模块完成对远程服务器的部署和执行命令。当在某一次对新镜像进行部署时,却发现Paramiko的ssh模块使用无密码方式却一直无法连接到指定服务器。使用密码方式去可以登录成功。

Paramiko模块一直会提示Authentication (publickey) failed问题,整个过程还是挺曲折的,所以记录和分析给大家。 以下是解决和分析该问题的主要关键步骤:

解决原理参考自: 阿里云ECS利用密钥对ssh登录服务器_NicolasLearner的博客-CSDN博客_ecs-密钥对登录

具体原因参考资料:/YBCLq

以上需要确保被访问的服务器对应用户.ssh目录下有authorized_keys文件,也就是将服务器上生成的公钥文件保存为authorized_keys。并将私钥文件作为paramiko的登陆密钥

关于RSA非对称加密

A 电脑 --登陆–> B 电脑

A: private key 私钥

B: public key 公钥

以root用户为例:

linux 生成公钥私钥对 (密码均为空):ssh-keygen

首先生成公钥和私钥 公钥加密 私钥解密

输入命令ssh-keygen 生成 生成部分就不截图了

# @CSDN王家视频教程图书馆

# @Time -01-13 20:50

1 进入目录:

命令:cd ~/.ssh

2拷贝一份公钥并命名为authorized_keys

命令:cp id_rsa.pub authorized_keys

3下载文件到本地为私钥在py文件中使用

命令: sz id_rsa

示意图:

右键运行控制台打印输入

可以看到已经使用rsa非对称加密文件代替了阿里云登录ssh的密码进行了登录操作

列出了远程阿里云服务器的文件

前方高能 上代码

功能1 检查版本更新

功能2 获取远程服务器版本

功能3 获取本地exe版本信息

功能4 下载远程文件夹下所有文件到本地

功能5 上传本地文件到远程 下载远程文件到本地

功能6 python操作本地文件夹和文件 创建 删除 修改 复制

# @CSDN王家视频教程图书馆# @Time -01-13 20:50local_version=''remote_version=''#获取远程服务器AND版本号import paramikoimport os,shutil# 公加pkey = paramiko.RSAKey.from_private_key_file('id_rsa')# 建立连接ssh = paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh.connect(hostname='39.106.155.202',port=22,username='root',pkey=pkey)#获取版本方式一import fnmatchsftp = ssh.open_sftp()for filename in sftp.listdir('/AND'):if fnmatch.fnmatch(filename, "*.Version"):remote_version=filename.replace('.Version','')print('远程AND版本号为:'+remote_version)#获取版本方式二# # 执行命令 多个命令使用 ; 分号分隔# stdin, stdout, stderr = ssh.exec_command('cd /AND;ls')# # 结果放到stdout中,如果有错误将放到stderr中# print(stdout.read().decode())#获取本地AND版本号from win32com.client import Dispatchfilename = r'C:\Users\xiangbin\PycharmProjects\pythonProject2\根据歌曲名称目录自动化批量下载歌曲\dist\getMusic\getMusic.exe'parser = Dispatch("Scripting.FileSystemObject")local_version = parser.GetFileVersion(filename)print('本地AND版本号为:'+local_version)int_local_version=int(local_version.replace('.',''))#去除点 1.0.0.0 转intint_remote_version=int(remote_version.replace('.',''))#去除点 1.0.0.0 转int# 实例化一个trans对象# 实例化一个transport对象trans = paramiko.Transport(('39.106.155.202', 22))# 建立连接trans.connect(username='root', pkey=pkey)# 实例化一个 sftp对象,指定连接的通道sftp = paramiko.SFTPClient.from_transport(trans)if int_local_version < int_remote_version:print('有新的版本可以更新了!\n'+'更新当前版本'+local_version+"为:"+remote_version)# 发送文件print('发送文件')sftp.put(localpath='11.txt', remotepath='/AND/1.txt')else:print('当前版本已经是最新版本了')# 下载文件print('下载文件')#sftp.get('/AND/1.txt', '远程到本地.txt')import statimport datetime as dtdef getRemoteFiles(remoteDir,sftp):# 加载sftp服务器文件对象(根目录)filesAttr = sftp.listdir_attr(remoteDir)try:# foreach遍历for fileAttr in filesAttr:# 判断是否为目录if stat.S_ISDIR(fileAttr.st_mode):# 1.当是文件夹时# 计算子文件夹在ftp服务器上的路径son_remoteDir = remoteDir + '/' + fileAttr.filename# 生成器, 迭代调用函数自身yield from getRemoteFiles(son_remoteDir,sftp)else:# 2.当是文件时# 生成器, 添加"路径+文件名"到迭代器"yield remoteDir + '/' + fileAttr.filenameexcept Exception as e:print('getAllFilePath exception:', e)# 远程目录remoteDir文件下载保存到本地目录localDirdef download_file(remoteDir,localDir,sftp):# 记录下载开始时间dt_start = dt.datetime.now()print('................. {} 开始下载!..................\n'.format(dt_start))# 判断输入的本地目录是否存在# if not os.path.exists(localDir):# # 若本地目录不存在,则创建该目录# os.makedirs(localDir)# 实例化生成器, 获取sftp指定目录下的所有文件路径files = getRemoteFiles(remoteDir,sftp)print(files)# foreach遍历for file in files:# 要下载的远程文件, 本地时路径+文件名remoteFileName = file###获取文件的全路径get_son_remote_dir='/'.join(remoteFileName.split('/')[0:-1])# 定义下载保存到本地时的路径+全路径+文件名localFileName = os.path.join(localDir+get_son_remote_dir, file.split('/')[-1])if not os.path.exists(localDir+get_son_remote_dir):# 若本地目录不存在,则创建该目录os.makedirs(localDir+get_son_remote_dir)try:# 下载文件, 本地已有同名文件则覆盖sftp.get(remoteFileName, localFileName)print('sftp服务器文件 {} 下载成功!\n该文件保存本地位置是 {} !\n'.format(remoteFileName, localFileName))except Exception as e:print('%s下载出错!:\n' % (remoteFileName), e)# 下载失败, 关闭连接sftp.close()# 下载成功, 关闭连接# 记录下载结束时间dt_end = dt.datetime.now()print('..................... {} 下载完成!..................'.format(dt_end))# 记录下载时长dt_long = dt_end - dt_startprint('................ 本次下载共用时间 {} !...............\n'.format(dt_long))if __name__ == '__main__':# 远程目录remoteDir文件下载保存到本地目录localDirdownload_file('/AND/docs','.', sftp)# 移动文件夹shutil.move("./AND/docs", ".")# 删除文件夹及内容shutil.rmtree("./AND")# 最后关闭连接ssh.close()trans.close()# python中对文件和文件夹进行移动、复制、删除、重命名,主要依赖os模块和shutil模块# 要死记硬背这两个模块的方法还是比较困难的,可以用一个例子集中演示文件的移动、复制、删除、重命名,用到的时候直接查询就行。#文件、文件夹的移动、复制、删除、重命名#导入shutil模块和os模块# import shutil,os## #复制单个文件# shutil.copy("C:\\a\\1.txt","C:\\b")# #复制并重命名新文件# shutil.copy("C:\\a\\2.txt","C:\\b\\121.txt")# #复制整个目录(备份)# shutil.copytree("C:\\a","C:\\b\\new_a")## #删除文件# os.unlink("C:\\b\\1.txt")# os.unlink("C:\\b\\121.txt")# #删除空文件夹# try:#os.rmdir("C:\\b\\new_a")# except Exception as ex:#print("错误信息:"+str(ex))#提示:错误信息,目录不是空的# #删除文件夹及内容# shutil.rmtree("C:\\b\\new_a")## #移动文件# shutil.move("C:\\a\\1.txt","C:\\b")# #移动文件夹# shutil.move("C:\\a\\c","C:\\b")## #重命名文件# shutil.move("C:\\a\\2.txt","C:\\a\\new2.txt")# #重命名文件夹# shutil.move("C:\\a\\d","C:\\a\\new_d")

(1)python pyinstaller打包exe添加版本信息(2)python获取exe版本信息(3)pyqt5开发exe添加检查版本更新功能

如果觉得《(1)python pyinstaller打包exe添加版本信息(2)python获取exe版本信息(3)pyqt5开发exe》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。