如果电脑运行Redis Desktop Manager时提示: 由于找不到MSVCP140.dll,无法继续执行代码。
那么先安装所需环境(VC_redist):
https://www.microsoft.com/zh-CN/download/details.aspx?id=48145
PS: 编译步骤还是比较多的, 还要下载很多国外网站的工具, 网速不好得下好久, 下完之后又是各种配置, 没几个小时搞完不完, 不过弄好一次之后下次新版本编译10分钟搞定, 我写这篇文章已经踩了一天的坑= =!, 希望后边的小伙伴少踩坑我已经是能写多详细写多详细了.
OS:Windows 10 x64
先看官方编译步骤: http://docs.redisdesktop.com/en/latest/install/ 注意Qt和Python的需要版本
Visual Studio 2017 Community Edition 安装后无需运行
QT(3种安装途径, 用的是5.13.x版本):
https://www.qt.io/download-qt-installer 在线安装工具(工具内的访问需要, 且需要C盘临时空间有7G)
http://download.qt.io/official_releases/qt/ 完整包下载(3.6G)
https://mirrors.ustc.edu.cn/qtproject/archive/qt/ 完整包下载(镜像网站)
QT安装时组件要勾选: MSVC 2017 64-bit
和 Qt Charts
CMake:到https://cmake.org/download/ 安装时注意勾选添加到 PATH, QT工具会用到
NSIS:http://nsis.sourceforge.net/Download 下载3.xx版本, 打包rdm安装的工具如不需要打包可不装
Python3:到 https://www.python.org/downloads/ 下载Python 3.7.x版本, 安装时勾选: Add Python to environment variables
和 Download debug bnaries (requires Vs 2015 or later)
安装目录:C:\Python37-x64
Python3运行库:https://www.python.org/downloads/windows/ 下载选择embeddable zip, 发给别人运行时需要该运行库
OpenSSL:https://slproweb.com/products/Win32OpenSSL.html 安装目录:C:\OpenSSL-Win64
Nuget:https://www.nuget.org/downloads 最新版本, 单独的exe程序, 用来下载一个依赖包
源码要下载多个源码, 因为有多个依赖项目, 依赖项目通常都放在项目中的3rdparty目录下, 依赖的项目还会有其他依赖项目, 本文下载时间2020-08-10, 后边这些依赖可能会变
RedisDesktopManager的GitHub地址: https://github.com/uglide/RedisDesktopManager 主要看3rdparty目录, 知道有哪些依赖项目, 这些项目是链接过去的, 所以下载的主源码包中只有一个空目录
主源码: https://github.com/uglide/RedisDesktopManager/releases/tag/2020.2 下载Source code (zip)
主源码依赖pyotherside: https://github.com/uglide/pyotherside/tree/c1a8cc03266b3b620ba9195e365e8751a8e4c9ef Code下载ZIP包
主源码依赖qredisclient: https://github.com/uglide/qredisclient/tree/9fe79f7c13b9811228db33abf75a83464a7cd2e2 Code下载ZIP包
qredisclient依赖asyncfuture: https://github.com/benlau/asyncfuture/tree/5ca03043bc54f310bae3097553c5a034f2032ec5 Code下载ZIP包
qredisclient依赖hiredis: https://github.com/redis/hiredis/tree/685030652cd98c5414ce554ff5b356dfe8437870 Code下载ZIP包
都下载完之后就有5个Zip包了, 然后开始组装这些源码的关系, 这里一定要细心按步骤做, 不然就会无法编译(苦逼)
这些Zip包默认里边都是有一层目录的, 以下解压全都是要进入这层目录后看到很多文件列表的层级进行解压
如果编译时出现无法找到头文件xxx.h这种错误那就是这边解压目录配置的不对
1.解压RedisDesktopManager-2020.2.zip > rdm-2020.2目录
2.解压pyotherside-xxx.zip > rdm-2020.2/3rdparty/pyotherside目录
3.解压qredisclient-xxx.zip > rdm-2020.2/3rdparty/qredisclient目录
4.解压asyncfuture-xxx.zip > rdm-2020.2/3rdparty/qredisclient/3rdparty/asyncfuture目录
5.解压hiredis-xxx.zip > rdm-2020.2/3rdparty/qredisclient/3rdparty/hiredis目录
6.进入rdm-2020.2/3rdparty/qredisclient/3rdparty/hiredis目录打开cmd黑窗口执行git apply ../hiredis-win.patch
如果没有提示就是成功, 有提示就是失败了, 这是修复windows平台下代码格式的兼容性问题的, 如果不执行, 编译时就会报各种中语法错误少了;号之类的
7.复制刚才下载好的nuget.exe文件到rdm-2020.2/3rdparty目录
8.进入rdm-2020.2/3rdparty目录打开cmd黑窗口执行: nuget install zlib-msvc14-x64 -Version 1.2.11.7795
会下载zlib依赖, 确保nuget.exe已经复制到这个目录才能执行, 否则会找不到命令
9.进入rdm-2020.2根目录打开cmd黑窗口执行: pip3 install -r src/py/requirements.txt
确保已经安装好了Python 3.7.x才能执行该命令
11.进入rdm-2020.2/src目录, 右键打开rdm.pro
文件, 确保已经安装好了Qt才能打开该文件
代码结构如图所示:
尤其看依赖项目的结构是否配置正确
12.编辑视图中打开rdm/rdm.pro文件, 修改版本号VERSION=2020.2.0-dev
改为 VERSION=2020.2.0
改完 Ctrl+s
保存(必须改,否则编译时报版本号必须为数值型错误)
13.编辑视图中打开rdm/3rdparty/3rdparty.pri文件, 检查 OPENSSL_LIB_PATH =
所写的OpenSSL目录与自己安装的目录是否一致, 如不一致就改成自己安装的目录
14.编辑视图中打开rdm/3rdparty/pyotherside/pyotherside.pri文件, 检查 QMAKE_LIBS +=
和 INCLUDEPATH +=
所写的Python37目录与自己安装的目录是否一致, 如不一致就改成自己安装的目录
15.转到项目视图修改构建配置为Release
16.编译之前先更新翻译(lupdate)->发布翻译(lrelease), 如果只用英文界面的话这步可忽略
17.点Qt界面左下角图标是锤子的按钮进行构建, 右下角就会弹出构建的进度, 显示绿色为构建完成
18.编译好后进入rdm-2020.2/bin/windows/release目录如果能看到 rdm.exe
文件则没问题, 然后将 rdm.exe
文件复制到rdm-2020.2/build/windows/installer/resources目录中
19.在rdm-2020.2/build/windows/installer/resources目录中编写 start.bat
脚本文件, 内容:
# 执行依赖库引入 # 注意: 命令中的windeployqt是一个exe程序, 该程序的目录需要按实际Qt的安装位置修改, \src\qml目录也是按源码解压时所在位置的绝对路径修改 H:\env\Qt\Qt5.13.2\5.13.2\msvc2017_64\bin\windeployqt --no-angle --no-opengl-sw --no-compiler-runtime --no-translations --release --force --qmldir H:\project\rdm-2020.2\src\qml rdm.exe # 删除一些不必要的文件 rmdir /S /Q .\qmltooling rmdir /S /Q .\QtGraphicalEffects del /Q .\imageformats\qtiff.dll del /Q .\imageformats\qwebp.dll
右键打开执行 start.bat
20.至此双击打开 rdm.exe
程序应该是可以看到界面的了, 但发给别人就会出现缺少python37.dll, 因为自己安装python37环境而别人没有, 所以还需要用到下载好的 python-3.7.x-embed-amd64.zip
包将里边的 python37.dll
和 python37.zip
复制到rdm-2020.2/build/windows/installer/resources目录中.
21.启动后在日志中提示以下错误(可不做)
Formatters: Function not found: 'formatters.get_formatters_list' (Traceback (most recent call last):
File "", line 1, in
AttributeError: module 'formatters' has no attribute 'get.formatters_list'
)
这是对redis的value值进行解析的扩展没有找到, 比如显示为二进制, msgpack等, 默认已经自带文本, json, 十六进制, 其实已经够用了, 没必要在配置了. 如果非要配置的话就按以下方式配置:
进入python37的安装目录, 进入Lib/site-packages下复制以下文件到rdm-2020.2/build/windows/installer/resources/Lib/site-packages目录中
cbor msgpack rdbtools redis bitstring.py lzf.cp37-win_amd64.pyd
进入rdm-2020.2/src/py目录复制所有文件到rdm-2020.2/build/windows/installer/resources/Lib/site-packages目录中
进入rdm-2020.2/src/phpserialize目录复制phpserialize.py到rdm-2020.2/build/windows/installer/resources/Lib/site-packages目录中
在编译过程中我发现2020.2的新脚本会报错所以我删掉了pickle格式扩展(报错原因是还缺少依赖库, 但我看了一下依赖库15MB大小, 为了节省安装包空间我选择不引入), 方法打开 formatters/__init__.py
文件删除以下两行
from .pickle import PickleFormatter "pickle": PickleFormatter(),
当然, 你可以更狠一点, 把所有扩展依赖都删掉, 那些扩展解析大部分情况下都用不着(反正我是一个都不引入)
进入rdm-2020.2/build/windows/installer/resources/Lib/site-packages目录打开cmd黑窗口执行: python -m compileall -b .
进行编译
编译完成后删除py源码文件, 保留pyc文件, 执行 del /s .\*.py
这时打开程序看到日志就是空的了, 不会显示报错信息了.
22.制作安装包, 这个时候其实已经是绿色版的rdm工具了, 发给别人自己用都可以, 但是想做成安装包, 装完注册在系统上就需要用到NSIS工具.
在运行之前先修改 rdm-2020.2/build/windows/installer/installer.nsi
文件在定义变量的位置插入一行 !define VERSION "2020.2.0"
用于定义版本号的变量
运行NSIS.exe
打开 rdm-2020.2/build/windows/installer/installer.nsi
文件就会开始编译了
编译完成后进入 rdm-2020.2/build/windows/installer
目录就能看到编译好的安装程序了
屏蔽更新检查提示:
编辑src/modules/updater/updater.cpp文件注释以下代码:
// manager->get(QNetworkRequest(updateUrl));
界面顶部那些加关注, 加星支持的按钮在src/qml/ApptoolBar.qml文件里, 不想看到可以自行处理
顺便发一下我编译出来的程序
https://download.csdn.net/download/aileitianshi/12700260