在Win10上安装Malmo
在Windows10上安装Malmo平台
Author:@Sumsky
前言
这里记录的是作者在自己的笔记本电脑上安装Malmo平台的经历和体会,包括中间遇到的问题和解决方式,都一并分享给读者。需要注意的是,读者按照下文指引安装时并不一定会遇到作者的问题,当然也有可能遇到一些作者没遇到的问题;因此本篇不一定能帮助所有人完成安装,但是读者仍可从中批判性地学习吸收有用的经验。
关于安装环境: 作者的电脑操作系统为win10家庭版, 版本号20H2,内部版本19042.546。
一点提醒
由于安装过程中多次涉及到从境外平台下载文件,所以作者强烈推荐在安装的全过程中使用一些手段和工具以保持稳定可靠的国际互联网连接。作者并未验证在不使用特定手段和工具的情况下是否能够安装成功,而不会出现安装速度延迟甚至超时中断的情况。
作者本人在安装过程中使用校园网,并全程开启相关工具,其中有一段时间还打开了全局代理模式,并有可能借此解决了遇到的一个问题。
Step1 访问Malmo项目Github主页
- Malmo项目在GitHub的链接为 https://github.com/microsoft/malmo;
- 在这个Github的仓库中,微软提供了英文版的安装指导,以及指向项目文档的链接。此外仓库的600多个Issues里还记录了众多Github用户在安装和使用Malmo中遇到的问题和解决方案,或许你在安装中遇到的问题就可能已经被人碰到过并提出来了:)
- 当然,作者本人也是根据Github上的说明(具体而言,主要是按照
Readme.md
中“Malmo as a native Python wheel”部分)一步步安装的,因此如果下文叙述中有任何谬误,也请以仓库中微软官方的文档为准。
Step2 下载并解压Malmo发行版
- 点击Github项目主页右侧的“Release”,或直接访问链接 https://github.com/microsoft/malmo/releases/tag/0.37.0;
- 选择文件名为 “Malmo-0.37.0-Windows-64bit_withBoost_Python3.7.zip” 的版本(如果你的python版本是3.6也可以下载3.6对应的那个),点击下载;
- 下载完成后,解压至你想要安装的目录。请记住这个目录,因为它以后可能会多次被用到。 这里我以我自己安装的目录举例:解压到
E:\Malmo
。解压后的目录结构如下图所示:
Step3 安装依赖项
Malmo平台想要在windows以及其它系统上运行都需要一些其它软件的支持。这一部分分为自动安装和手动安装两种方式。作者曾尝试使用微软提供的脚本自动安装,但是没有成功,后改用手动安装。
部分常用语解释:
安装目录 -> 上一步中解压发行版的根目录,在作者的电脑上是E:\Malmo
;
在xxx目录打开命令行 -> 首先进入对应的xxx目录,点击左上角文件->打开Windows Powershell->以管理员身份打开Windows Powershell。当然也可以在cmd中使用cd
命令进到对应的目录里。
自动安装
参考文档: https://github.com/microsoft/malmo/blob/0.37.0/doc/install_windows.md
- 打开安装目录下的scripts文件夹,并在这个目录下打开命令行;
- 执行
Set-ExecutionPolicy -Scope CurrentUser Unrestricted
,如果出现提示选yes; - 运行安装脚本,即执行
.\malmo_install.ps1
; - 等待脚本执行结束,可能需要一些时间。如果长时间卡壳或者报错,请尝试重新运行,或者手动安装(见下)。
手动安装1:7-Zip
手动安装参考文档:https://github.com/Microsoft/malmo/blob/master/doc/install_windows_manual.md
- 访问https://www.7-zip.org/,首页选择合适版本,下载并运行安装程序;
- 验证方式:在控制面板“卸载程序”的程序列表中查看是否出现7-Zip;
手动安装2:FFMpeg
- 作者自动安装的失败就是因为这个软件。脚本中和参考文档中提供的下载链接已经失效,具体来说,https://blog.csdn.net/zsp312717/article/details/108933026 指出链接已经不再可用,只能到GitHub上下载,且不提供32位版本。
- 访问 https://github.com/BtbN/FFmpeg-Builds/releases,在发行版列表中选择对应的版本点击下载。作者安装时选取的是名为 “ffmpeg-n4.3.1-20-g8a2acdc6da-win64-gpl-4.3.zip” 的版本,不过实际上下载的速度仍然较慢;
- 压缩包下载完成后,解压至你想要安装的目录。作者此处选择解压到
C:\ffmpeg
; - 将该安装目录下的
bin
目录添加到环境变量Path(具体添加方式可自行百度),作者在这里本着“多一事不如少一事”的原则,直接将C:\ffmpeg\bin
添加到添加到系统环境变量,适用于计算机上的所有用户。
- 完成本步。验证方式:在cmd中输入
ffmpeg
,观察是否响应;
手动安装3:Python
- 这个读者肯定都已经安装,就不赘言了。注意需要将python的安装路径添加到系统环境变量中,即确保在cmd中输入
python
有响应;
手动安装4:OpenJDK
- 这里作者由于曾经自学过一点Java,所以已经在自己的电脑上配置好了Java的开发环境,包括从Oracle网站下载的JDK8和对应的JRE,所以就不需要再下载安装OpenJDK了。有相同情况的同学也可以跳过这一步。
- 尽管曾经用过的Logisim和MARS也要求有Java的运行环境,不过作者无法确定这个环境是否满足Malmo的运行要求。鉴于此,推荐读者安装并配置完整的Java开发环境,既能满足当前要求,又可以方便将来升学或工作中的使用。
- 作者在此不会详细介绍配置Java开发环境的步骤,因为在上学期1806的OO课程中,已有助教撰写了一份详细的文档指导隔壁计算机专业的同学。文档名为 “OO工具链教程.pdf” ,作者已经将其上传到班级公共网盘的文件夹,读者可以直接登录北航网盘的“180621”共享文件夹查看,或者通过https://bhpan.buaa.edu.cn:443/link/51D8179EA8FED500E283D02688A53D4E (有效期限:2020-11-07 23:59) 下载。对于我们要安装的Malmo,只需要关注该文档的“JDK安装配置指南”部分即可。
- 当然,如果读者仅仅想要安装Malmo参考文档中要求的OpenJDK,也可自行通过搜索引擎了解安装步骤,并确保已经配置好
JAVA_HOME
等环境变量。 - 验证方式:在cmd中输入
java
观察是否有响应;以及检查环境变量是否配置到位(见下图,JAVA_HOME
没必要保持一致):
手动安装5:设置MALMO_XSD_PATH环境变量
- 在设置环境变量的窗口,新建一个系统环境变量,变量名为
MALMO_XSD_PATH
; - 变量值设定为Malmo安装目录下的
Schemas
文件夹,以作者的电脑为例,设置为E:\Malmo\Schemas
; - 验证方式:检查环境变量是否配置到位(见下图):
Step4 首次运行Minecraft终端
需要注意的是,今后每次运行python代码前,也需要遵循下面的步骤首先打开minecraft终端界面。 每次运行时系统都会检查MC运行所需的文件是否下载齐全,因此首次运行需要比较长的时间,而后续就比较短了。作者在自己的电脑上安装成功后,每次运行MC基本可以在1.5min内完成;
-
进入安装目录下的
Minecraft
文件夹,在作者的电脑上是E:\Malmo\Minecraft
; -
在该目录下打开命令行,执行
.\launchClient
; -
Wait for a looooooooooooooong time… until Minecraft window appears;
-
作者在这里执行了两次脚本才完成安装,首次执行时由于无法下载其中的一些文件导致卡壳;随后作者采取的解决方案是关闭命令行,将保证国际互联网连接的工具切换为全局模式,重新执行脚本,就成功启动MC了。整个过程用时相当长,两次执行前前后后大概得有至少半个多小时,因此大家不妨保持耐心;
Step5 运行示例程序
- 可以点击左下方的“地球图标”修改游戏的语言(虽然用处不大)
- 在上图所示的Minecraft终端界面上进行如下操作:点击mods选项卡 -> 左侧选中"Microsoft Malmo Mod",点击下面的Config -> 将"debugDisplayLevel"切换到"Show all diagnostics" -> 点击下面的完成,返回主界面。
- 关注主界面上的两个信息:
- 左上方的"CLIENT: …“指示当前MC终端的状态,正常情况应当是"DORMANT”;
- 右下方的"MCP"指示平台与终端通讯的端口,在[10000, 11000]中取值,记住该端口;
- 现在可以进入
Python_examples
目录,开启另一个终端并使用python
命令运行程序了,注意需要保持Minecraft终端界面和之前执行.\launchClient
的命令行界面不能关闭;也可以直接在编辑器(如vscode)中运行; - 需要注意的是,作者在自己的电脑上只能使用
python
命令才能成功运行程序,如果使用我们之前在虚拟机上的python3
命令,结果是没有反应:程序在没有任何输出的情况下直接终止,MC的终端也没有任何动作; - 作者在此遇到的其他问题包括:
命令行输出错误信息:
import MalmoPython
ImportError: DLL load failed: The specified module could not be found.- 这个问题在GitHub的Issue中被提出过很多次,一般的引发原因是:微软在Github上开放的源代码中包含了一个名为
zlib.dll
的文件,但是这个文件不知道什么原因并未在发行版中提供。解决方案也很简单:访问https://cn.dll-files.com/zlib.dll.html,下载一个对应版本的文件,将其拷贝到Python_examples
目录中即可,或者如果读者的电脑上有同名文件也可以直接拷贝。
命令行输出错误信息:
malmo Error starting mission: Failed to find an available client for this mission- tried all the clients in the supplied client pool.- 根据提示,程序没有找到可以与MC终端通信的端口。这里需要关注一下之前提到的MC主界面右下角的MCP值与程序中设定的端口是否一致。程序中往往使用
my_client_pool.add()
设置通信端口,如果没有相关语句,那么默认使用端口10000. 如果二者不一致,就会出现上面的错误信息。解决方案是在程序中添加相关语句,将通信端口设置为MCP指定的端口。在作者的电脑中,MC终端选择了10001端口,这样一些使用默认端口的程序就无法运行,我们在程序的合适位置添加如下代码(或找到同样的代码并修改端口值):
同时修改开始任务的语句:1
2
3# 将程序中与MC终端的通信端口设置为10001
my_client_pool = MalmoPython.ClientPool()
my_client_pool.add(MalmoPython.ClientInfo("127.0.0.1", 10001))1
2
3
4
5
6
7
8
9'''
五个参数都必须填写。
参数1、3一般已经定义;
参数2刚刚在上方定义;
参数4用于区别同一个mission中的不同agent,单agent情况下可填0;
参数5用于标识当前任务,可设置为任意字符串;
参数说明参考https://microsoft.github.io/malmo/0.30.0/Documentation/classmalmo_1_1_agent_host.html#ada45e62f1d53c9946631d49ecef9fce9
'''
agent_host.startMission( my_mission, my_client_pool, my_mission_record, 0, "tutorial_1" ) - 这个问题在GitHub的Issue中被提出过很多次,一般的引发原因是:微软在Github上开放的源代码中包含了一个名为
- 当你可以正常运行
Python_examples
中的程序并在Minecraft终端里看到结果时,也就意味着Malmo平台已经在你的win10上安装成功了。Enjoy it!
参考资料
- https://blog.csdn.net/cosmispower/article/details/77388550
- 百度上唯一可以找到的中文版Malmo安装经验帖
- https://github.com/microsoft/malmo/issues
- github上Malmo项目的issues页面,可以搜索issues的内容,查看是否已经有类似问题提出
- https://github.com/microsoft/malmo/wiki
- 项目的wiki页面,有一些常见的问答FAQ和相关链接(当然都是英文的)
- https://microsoft.github.io/malmo/0.30.0/Documentation/index.html
- 项目的文档主页,里面有完整的tutorial和API介绍
- Google(需要特定工具才能访问)。对于英文资料远多于中文的现状,用谷歌搜索英文资料显然更加高效。