使用 Windows Subsystem for Linux 进行Python开发

Windows正在成为最好的Linux发行版

首先上一张成品图

初学Python的时候,常常因为Windows上出的各种问题抓狂,于是安装了Linux双系统。实习后很快买了台二手的Macbook。然而给其他萌新无论安利双系统,虚拟机,vagrant还是Macbook效果都不好。毕竟不是每个人都有修电脑满级的动手能力的。初学编程本来就要吸收很多知识。再加上不熟悉的系统和软件产生的问题。本来简单易学的知识也变得麻烦起来……

歪个楼,虽然很多人推荐Vim,Emacs,Sublime等编辑器,但是对于初学者而言上手成本低的IDE是更好的选择。专注于学习Python本身,足够熟练了再折腾Linux命令,编辑器使用是更好的选择。而对于IDE的选择,某些凑数的文章能列举十个八个的。其实唯一好的选择是Pycharm,而且学生可以免费获取到Professional版,没必要去搜盗版。

16年微软推出了Win10的Linux子系统(之后用WSL代替)。但是当时WSL需要预览版系统才安装且体验非常差。我安装也没怎么用过。一年过去,到今年五月的创造者更新时,WSL已经完善了很多,可以跑起Python和Node.js的工具链了。对于依赖*nix环境的开发人员,Windows已经可以部分取代MacOS和Ubuntu来换取更好的桌面体验(更多的可购买电脑选择)了。

安装与基础使用

为了方便萌新,把安装过程摘录如下

  1. 更新Win10系统至最新版(本文示例的版本是1703)
  2. 打开系统的 开发人员模式
    开始-设置-更新与安全-针对开发人员 选择开发人员模式。在漫长的等待(系统搜索下载一些文件)后重启电脑
  3. 启用Windows功能 - 适用于Linux的Windows子系统
    开始-设置-应用-应用与功能-相关设置-程序与功能 弹出了久违的控制面版。选择 启用或关闭windows功能,然后勾选上 适用于Linux的Windows子系统(Beta)点确定。根据提示重启电脑
  4. 安装WSL
    开始(右键点击)-Windows Powershell。输入bash,按照提示文字操作即可(是否使用当前时区选yes;用户名密码自己填)
    更详细的操作见图(可以卸载重新安装什么的)

然后就进入了Linux的shell环境了。之后想进入的话还是在Powershell里面输入bash

Windows的C盘根目录对应在shell里面是/mnt/c/,权限为777;而Linux的根目录在Windows里面是C:\Users\你的用户名\AppData\Local\lxss。我对于文件共享的建议是文件和代码按照Windows的使用习惯放,把相关的文件夹软连接到wsl的home目录。

连接Pycharm

对于初学者来说,更多的情况是编码用Windows下的Pycharm,运行代码用wsl的环境。然而Pycharm需要代码的运行环境来进行静态检查,自动跳转等对初学者极其有帮助的功能。我们需要让Pycharm能够访问到wsl下的Python运行环境:

  1. 修改/etc/ssh/sshd_config 允许密码登录
    在末尾加上两行
    1
    2
    PasswordAuthentication yes
    UsePrivilegeSeparation no
  2. 生成密钥
    1
    sudo dpkg-reconfigure openssh-server
  3. 开启 ssh
    1
    sudo service ssh start
    和其他Linux系统不同,WSL并不会开机自启这些服务。解决方法见下文
  4. Pycharm里面配置远程环境
    需要Professional版,可以参考[官方教程](https://www.jetbrains.com/help/pycharm/2016.1/ configuring-remote-interpreters-via-ssh.html)

易用性改造

以下内容根据需要自选使用,用上好工具可以提升效率和心情,没有的话也无大碍

一个好用的终端工具

windows下面的终端环境无论是cmd还是powershell都是瞎眼般的配色和字体,而且很难改。在之前有一个还是不错的终端软件叫cmder。但是如果只是用wsl的话,我们有更好的选择wsl-terminal

还有一个邪教:刚才不是开了ssh服务么,那么就能用ssh软件比如putty,xshell等直接连接127.0.0.1就好了,体验也很不错。

字体

只安利两套字体包:

基于微软雅黑的YaHei Consolas Hybrid 1.12,有良好的中文体验(我设置成了系统默认字体

还有一个是Powerline Fonts,包含了各种有Powerline表情的编程字体。用过ohmyzsh和Powerline的都知道。下载后运行目录下的install.ps1安装到系统。

便捷访问Windows的目录

刚才已经说过了:文件和代码按照Windows的使用习惯放,把相关的文件夹软连接到wsl的home目录

1
2
ln -s /mnt/c/Users/你的Windows用户名/Desktop/ /home/你的wsl用户名/Desktop/
ln -s /mnt/c/Users/你的Windows用户名/Downloads/ /home/你的wsl用户名/Downloads/

终端切屏,多标签页

使用Tmux

其他

mysql, ssh等服务不会自启

目前还不支持,只能考虑用曲线救国的方案:开启启动一个脚本,调起shell脚本启动服务。下面是一个例子

一个放在启动项里面的vbs脚本

1
2
3
Set WshShell = CreateObject("WScript.Shell") 
WshShell.Run "C:\Windows\System32\bash.exe -c ~/autostart.sh",0
Set WshShell = Nothing

home目录下的 autostart.sh 文件

1
2
3
4
#!/bin/bash
sudo service mysql start
sudo service ssh start
bash

sudo默认情况下是需要输入密码的,我们可以编辑/etc/sudoers来避免输入密码

1
2
3
# Allow apache2 and mysql to start without a sudo password
%sudo ALL=(ALL) NOPASSWD: /usr/sbin/service ssh *
%sudo ALL=(ALL) NOPASSWD: /usr/sbin/service mysql *

反馈疑难问题

在使用中总会遇到一些奇怪的问题:Google搜一下,问问身边的人,实在不行就去开发组的Github上面提issue。

我刚安装的时候遇到了一个网络的灵异问题,搜索不到答案。最后去提issue得到了两个人热心的回复,虽然最后是自己重装系统后才发现因为我安装了火绒杀毒软件造成的不兼容……

让我抓狂了两天的问题 - Github Issue

参考资料


使用 Windows Subsystem for Linux 进行Python开发
https://blog.kdwycz.com/archives/use-windows-subsystem-for-linux/
作者
kdwycz
发布于
2017年5月27日
许可协议