在Windows11中安装WSL2(Ubuntu20.04)并配置数据分析环境(anaconda、pyspark)
神楽こいし
2022年05月27日 23:20
收录于文集
共2篇

介绍一下在win10/win11上安装linux子系统,并在其上搭建环境,用于数据分析。

安装前

安装WSL2需要Windows 10 2004以上版本或者Windows11,且需要为专业版及以上,不满足条件请放弃或自行升级系统

除此以外还需要检查是否已开启CPU虚拟化和虚拟机平台

打开任务管理器(Ctrl+Alt+Esc),切换到性能,可以在如图中看到CPU虚拟化的状态,默认是禁用,需要进入Bios开启,不同厂商主板Bios不尽相同,请自行查询,常规理性而言,会是CPU Configuration里的SVM字样设置

成功开启CPU虚拟化后,在搜索栏中搜索功能,即可出现“启用或关闭Windows功能”。如果没有,或者关闭了搜索栏,可以在控制面板-程序-程序和功能中找到此项

勾选虚拟机平台,单击确定,等待安装完成后重启

安装WSL2

打开微软商店,搜索linux,选择Windows Subsystem for Linux Preview,获取安装

然后搜索安装你想要安装的Linux分发版,本篇以Ubuntu20.04为例。

如果你有较丰富的Linux使用经验,有自己的想法,也可以选择其他版本,如Debian等(如果你在微软商店中找不到你想要的版本,可以尝试在github上找一找)

如果存在应用商店网络问题,可以尝试使用Host修改工具(www.dogfight360.com/blog/475/)修改微软商店相关的地址

在Windows Subsystem for Linux Preview安装完成后,打开Ubuntu20.04,进行初次安装和用户设置,正常会出现这样一个窗口:

出现“Enter new UNIX username:”后就可以开始设置用户名和密码了,这里自行填写你想设定的内容,设置完之后就会登入Ubuntu了

然后需要检查wsl的版本,我们需要wsl2而不是wsl

按win + r, 输入cmd,以打开cmd终端,输入以下代码以查看安装的linux发行版列表

代码块
Shell
自动换行
复制代码
wsl -l -v
复制成功

如果version为2,说明已经安装为wsl2版本,如果为1,输入以下代码:

代码块
Shell
自动换行
复制代码
wsl --set-version Ubuntu-20.04 2 #将Ubuntu-20.04替换为你所下载安装的Linux分发版名称
复制成功

至此,WSL2的安装已经完成

安装vscode并连接到WSL2

vscode是微软出品的一款相当好用的代码编辑器,强烈推荐使用它来辅助开发,本篇教程也是基于vscode来写的

在官网下载安装Visual Studio Code(code.visualstudio.com)

一般来说,下载会很慢,可以在下载管理中找到下载直链,一般形式为:

代码块
Shell
自动换行
复制代码
https://az764295.vo.msecnd.net/stable/c3511e6c69bb39013c4a4b7b9566ec1ca73fc4d5/VSCodeUserSetup-x64-1.67.2.exe
复制成功

将前面的https://az764295.vo.msecnd.net/替换为https://vscode.cdn.azure.cn/,即可使用国内镜像下载站,速度起飞

安装完成后运行vscode

正常情况下,第一次启动右下角会弹出提示安装中文语言包,如果错过或者没有提示,也可以自己手动安装

点击左侧的扩展按钮(Ctrl + Shift + X),搜索"简体中文&#​34;,安装后按下Ctrl + Shift + P,输入language,选择"配置显示语言”并选中zh-cn,之后重启vscode即可

安装中文语言包并启用

然后安装Remote-WSL插件,搜索"remote&#​34;,选择Remote-WSL安装即可

安装RemoteWSL插件

安装完毕后可以在最左下角看到一个按钮(一个由>和<组成的按钮)”打开远程窗口“,点击,选择New WSL Windows,会弹出一个新的vscode窗口,原来的就可以关掉了,在初始化完成后左下角会显示当前连接的WSL子系统名称,如"WSL: Ubuntu-20.04&#​34;

将vscode连接至wsl

点击左侧的第一个图标,资源管理器,点击”打开文件夹“,点击确定,或者把文件夹更换为你想要使用的文件夹,up这里将 home/<你的用户名>/ 删掉了,选择了子系统的根目录作为工作区(即输入框里只有一个/),这样比较方便后续修改一些根目录下的文件,建议和笔者保持一致

设置工作区目录

点击确定,自动重载后就可以在左侧资源管理器中看到文件目录了

工作区目录效果

然后在vscode中打开终端(Ctrl + `)

打开终端

会自动登入linux子系统,接下来就可以配置开发环境了

开发环境搭建

第一步,换源,即修改linux apt下载地址,以加快各种linux软件下载速度,避免下载安装失败

在终端中输入并执行(第一次sudo需要输入用户密码)

代码块
Shell
自动换行
复制代码
sudo chmod 777 /etc/apt/sources.list	# 提权,方便直接使用vscode编辑文件
复制成功

然后在左侧文件目录中找到并打开/etc/apt/sources.list,将里面的文本替换为

代码块
Shell
自动换行
复制代码
# 默认注释了源码仓库,如有需要可自行取消注释
deb https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse

deb https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse

deb https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse

deb https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# 
复制成功

Ctrl + S保存即可

修改/etc/apt/sources.list

然后打开一个新的终端(Ctrl + Shift + `),在终端中输入sudo apt update进行更新,并等待更新完成

代码块
Shell
自动换行
复制代码
sudo apt update	# apt更新
复制成功

下载anacodna安装包

代码块
Shell
自动换行
复制代码
wget -P /tmp https://repo.anaconda.com/archive/Anaconda3-2022.05-Linux-x86_64.sh # 下载anaconda安装包至 /tmp 目录下
复制成功

安装

代码块
Shell
自动换行
复制代码
bash /tmp/Anaconda3-2022.05-Linux-x86_64.sh	# 安装anaconda
复制成功

安装过程中一路按Enter或输入yes,注意:安装的最后一步时自动执行conda init,这一步会超时自动跳过,为了避免麻烦,请时刻注意安装进度。如果实在错过了conda init,建议百度一下解决方案,这里就不赘述了。

等待安装时,可以在扩展中搜索python插件,将其安装到wsl中,安装完毕后清空搜索框应该是如图所示的情况(安装python插件会自动安装jupyter等其他插件,jupyter keymap应在本地启用而非wsl中)

安装python插件

重新打开一个新的终端,会自动进入base环境中

启用了conda的终端

conda、pip换源,加快各种依赖包的下载安装速度

代码块
Shell
自动换行
复制代码
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/pkgs/main # 添加conda下载源,目的是它自动生成的一个配置文件
复制成功

执行上述代码后刷新资源管理器,可以在用户文件夹(/home/<你的用户名>/)下找到一个.condarc文件,替换成以下内容保存即可

代码块
Shell
自动换行
复制代码
channels:
  - defaults
show_channel_urls: true
default_channels:
  - https://mirrors.bfsu.edu.cn/anaconda/pkgs/main
  - https://mirrors.bfsu.edu.cn/anaconda/pkgs/r
  - https://mirrors.bfsu.edu.cn/anaconda/pkgs/msys2
custom_channels:
  conda-forge: https://mirrors.bfsu.edu.cn/anaconda/cloud
  msys2: https://mirrors.bfsu.edu.cn/anaconda/cloud
  bioconda: https://mirrors.bfsu.edu.cn/anaconda/cloud
  menpo: https://mirrors.bfsu.edu.cn/anaconda/cloud
  pytorch: https://mirrors.bfsu.edu.cn/anaconda/cloud
  pytorch-lts: https://mirrors.bfsu.edu.cn/anaconda/cloud
  simpleitk: https://mirrors.bfsu.edu.cn/anaconda/cloud
 #
复制成功

修改.condarc文件

更换pip下载源:终端中执行命令

代码块
Shell
自动换行
复制代码
pip config set global.index-url https://pypi.mirrors.ustc.edu.cn/simple # 修改pip下载源
复制成功

接下来,我们需要创建一个虚拟环境,因为不能(很不推荐)直接在base环境下进行开发,输入

代码块
Shell
自动换行
复制代码
conda create -n pyspark python=3.8 anaconda
# 以下不用复制
# pyspark 所创建的虚拟环境的名称,可自定义
# python=3.8 指定所创建的环境的python版本,可自定义
# ananconda 继承anaconda根环境中的所有依赖包
## 会让安装速度变得很慢,可以删去后再自行用pip安装需要的依赖
## 比如pip install pandas、 pip install jupyter
#
复制成功

回车进行安装,安装完成后切换到新创建的dev环境中:

代码块
Shell
自动换行
复制代码
conda activate pyspark	# 激活虚拟环境
复制成功

然后执行jupyter notebook命令

代码块
Shell
自动换行
复制代码
jupyter notebook # 启动notebook进程
复制成功

终端中会返回一大串信息,其中有四行会包含访问jupyter notebook的链接(带有token),复制到浏览器即可使用notebook了

但是up主并不推荐使用这种方式,因为比较麻烦,推荐直接用vscode访问notebook,以下是配置方法:

首先要生成一份jupyter notebook配置文件

代码块
Shell
自动换行
复制代码
jupyter notebook --generate-config	# 生成notebook配置文件
复制成功

在用户文件夹(/home/<你的用户名/>)下找到.jupyter文件夹,打开可以看到一个jupyter_notebook_config.py文件,打开它,按Ctrl F搜索 c.NotebookApp.token = '<generated>&#​39; ,删掉引号内的部分, 并去掉前面的注释"#​",Ctrl S保存

代码块
Shell
自动换行
复制代码
# 修改前:
# c.NotebookApp.token = '<generated>'
# 修改后:
c.NotebookApp.token = ''
# 
复制成功

完成后回到终端,输入jupyter notebook即可启动notebook,在浏览器中输入http://localhost:8888/即可进入notebook页面

代码块
Shell
自动换行
复制代码
jupyter notebook
复制成功

按下Ctrl + Shift + P,输入"重新&#​34;,点击重新加载窗口以重载vscode,再次按下Ctrl + Shift + P,这次输入jupyter,选择Create: New Jupyter Notebook

通过vscode创建一个新的空白notebook

创建好后,可以在右上角可以看到“选择内核”按钮,点击选择之前创建的虚拟环境所对应的python内核

最新更新:这里的内核有时候会识别错误,名字错乱,建议通过路径和python版本来判断环境,或者识别不到,建议重载vscode

选择内核

(可选)安装Spark

在某些情况下,我们可能需要开发测试pyspark环境下的代码,用以测试功能,因此介绍一下pyspark安装方法,及如何通过jupyter notebook使用pyspark

安装java

代码块
Shell
自动换行
复制代码
sudo apt install default-jre # 安装java,版本可自定义(如果你会)
复制成功

安装pyspark

代码块
Shell
自动换行
复制代码
pip install pyspark # 执行该命令前,请务必确认你处在正确的虚拟环境而非根环境base中!!!
复制成功

此时在终端中输入pyspark并执行就已经可以进入pyspark命令行了(Ctrl D退出)

pyspark-shell

接下来,安装findspark

代码块
Shell
自动换行
复制代码
pip install findspark # 安装findspark
复制成功

安装完成后,回到notebook,执行代码:

代码块
Python
自动换行
复制代码
import findspark
findspark.init()
from pyspark.context import SparkContext
from pyspark.sql.session import SparkSession
sc = SparkContext('local')
spark = SparkSession(sc)
# 
复制成功

再在新的cell里执行sc,可以看到图中所示输出即说明安装完成

点击蓝色的Spark UI,可以在浏览器中进入Spark Job管理页面

spark job web界面

测试代码

代码块
Python
自动换行
复制代码
spark.sql('select current_date').show()	# 执行sparksql并返回结果
复制成功

执行sparksql并返回结果

可以正常输出结果,说明pyspark到此就顺利安装完成了

一些小优化

我们在做数据分析的时候,肯定经常会需要导入一些包,如numpy、pandas等,也包括上面那段启动pyspark的代码,如果每次重新打开notebook都要重新导入是很麻烦的,我们可以让notebook在每次启动的时候执行一段指定的代码,这样就能省事很多

打开资源管理器,打开home/<你的用户名>/.ipython/profile_default/startup/start.py,如果没有自己创建这些目录和文件

然后在这个文件中写上你希望notebook自动执行的代码即可,这里up提供一个参考

代码块
Python
自动换行
复制代码
# 启动pyspark、导入常用pysparksql函数functions和Window
try:
    import findspark
    findspark.init()
    from pyspark.context import SparkContext
    from pyspark.sql.session import SparkSession
    sc = SparkContext('local')
    spark = SparkSession(sc)
    from pyspark.sql import functions as F
    from pyspark.sql import Window
except:
    1

# 常用import之一:numpy、pandas
try:
    import numpy as np
    import pandas as pd
    from math import *
except:
    1

# start.py文件不区分虚拟环境,所有环境都会预加载同样的代码
# 所以使用try except来分模块进行预先导入、定义比较稳妥
# 这样就不会因为虚拟环境的变更,某一部分代码执行失败导致后续全部失败
# 
复制成功

类似notebook启动自动执行,终端也可以设置启动时自动执行,打开home/<你的用户名>/,找到.bashrc,打开并在文件末尾加上任意你想让终端自动执行的命令,比如切换conda环境、切换目录等,这里up也提供一个参考

代码块
Shell
自动换行
复制代码
cd home/kagurakoishi/ # 替换成你自己的用户文件夹
conda activate pyspark	# 替换成你最常用的虚拟环境
## 如果无效,尝试在vscode设置中搜索Terminal: Activate Environment,关闭相关设置项
复制成功

PS: 此外.bashrc这个文件,也是编辑环境变量(PATH)的地方,后续会经常用到。建议将上述代码保持在文件末尾,即PATH放在conda init 和 上述代码中间。

PS2: 文中全部下载镜像源都编辑过一次,最开始写的是阿里镜像源,这里可以根据个人情况自行选择,百度国内镜像源即可。(up主的网络环境下,阿里云镜像源真的不大行,速度比中科大等镜像源慢几十倍不夸张)

以上です。