想象一下,你用 Linux 版本的 Tensorflow 建立了一个美妙的 RNN 模型,然后无缝切换到 Windows 用 Excel 直接编辑结果,画了一幅 fancy 的图给你的老板。在此期间,你的所有模型文件已经被自动同步到了 Onedrive/百度云/Dropbox 上了!整个过程丝毫没有使用虚拟机的“膈应”感!
”
写
在前面
相信在Windows中使用 Python 和 R 小伙伴为数不少,虽然 Python 和 R 并不挑平台,但是总还有一些情况 Linux 版本更有优势,这些情况包括:
R 在 Linux 中使用并行计算包 Parallel 更快,因为 R 可以直接调用 Linux 内核中的 fork 功能复制 N 个“一摸一样”的线程,但是在 Window 中,fork 并不被支持,想要创建多线程,就必须先创建一个主线程,然后再创建从线程,比较麻烦。体现在使用过程中,我们可以在 Linux 中直接使用 mcapply 进行多线程操作,但是在 Windows 中,我们必须提前创建 worker,然后再初始化,然后才能调用多线程函数。
有些包没有 Windows 版本。 对于 Python 和 R 双修的同学,一个迫切的需求就是能够在同一个 jupyter 笔记本中调用两种语言,但是很可惜,完成两种语言互相调用的神包rpy2 并没有官方的 Windows 版本。此外,R 中最好的数据处理包 data.table,也只有在 Linux 中才有对应的 Python 版本。
有些软件没有 Windows 版本。 比如使用最广泛的基于内存的键值数据库 Redis,以及 Jupyterhub。
虚
拟机
“
然而,除非是职业开发者,将主力操作系统完全转移到 Linux 可能是一件得不偿失的事。此时一个常见的折衷办法是使用虚拟机,不过虚拟机本身也很有很多问题
”
虚拟机资源开销巨大。原来就捉襟见肘的内存和硬盘,开了虚拟机后可能就没多少留给 R 了(别忘了 R 和 Python 需要把所有数据都加载到内存中!)此外,虚拟机还会挤占 CPU 资源 (用 MacOS的同学一定深有体会)。本来我们期望的是 Linux 中的 R 能带来更好的并行运算效率,但是虚拟机不光吃掉了 Linux 带来的效率优势,性能更可能还不如在 Windows 版本。
虚拟机访问宿主系统资源比较麻烦。举个例子,假如我们在虚拟机中创建了很多数据集,但是突然有一天我们想要用 Office 打开,这时我们只能把这些数据从虚拟机中复制到宿主机中。明明只是想查看一个文件,结果却不得不在两个系统中复制一遍。可以说,虚拟机最大的缺点在于 虚拟机和宿主机无法操作“同一个”文件。 背后的原因在于,虚拟机对于宿主系统来说是个外来者,因此虚拟机中的系统想要访问 Internet 或者宿主系统中的文件,就必须使用某种技巧“在宿主系统的防火墙中打一个洞”。
解
决
那么有没有什么办法可以让我们同时享受 Linux 带来的效率和 Window 给我们带来的便捷呢?答案就是微软在 Win10 中推出的 Linux 子系统 WSL(Windows Subsystem for Linux)!Win10 中的这个 Linux 子系统并不是虚拟机,而是和 Win10 并行的子系统,你可以用它可以完成 Linux 能做的“几乎”所有事,包括 bash。
根据官方文档,相对于虚拟机,WSL 的优点是:
……WSL 需要更少的资源(CPU, 内存,硬盘)。WSL 能够让你在 Windows 命令行中直接运行 Linux 命令,并且直接访问你在 Windows 中的资源。因此,你能同时使用 Linux 和 Windows 中的工具对同一组文件进行操作!
前
方高能
“
温馨提醒:本教程适合对于 Linux 有基本了解的读者(比如知道什么是 bash,什么是 curl 命令等)。当然 Linux 零基础的读者按照教程也可以顺利安装,但由于 WSL 没有图形界面,只能通过命令行运行,因此第一次使用可能会比较陌生。
”
Okay,那就让我们直接进入正题:和在Win10中使用Linux版本的R和Python
启用 Linux 子系统
1. 在微软商店下载 Linux 子系统
打开 Win10 的微软商店,搜索“Linux”,我们会发现微软已经为我们提供了众多的 Linux 发行版本。选择你需要的版本,如果你不知道选哪个,就选 Ubuntu 吧。选好后点击安装。