简介
2016年,微软推出了Windows Subsystem for Linux(WSL),这使得Windows具有了强大的Unix功能。2019年5月,微软宣布发布了具有更新架构的WSL2,该架构改进了WSL的许多方面——特别是文件系统的性能方面。我已经关注WSL一段时间了,但是现在WSL2即将发布,我决定安装并试用它。在我使用它的这几天里,我真的很喜欢这种体验。Windows 10和完整的Linux发行版(如Ubuntu)的组合使用是一个非常强大的开发方案,它的工作成效惊人。
下文将讨论:
·什么是WSL?为什么要在你的系统上安装并使用它?
·说明如何安装WSL2,介绍一些可以使开发更高效的辅助应用程序。
·如何在Windows和Linux的组合环境中让python和这个新功能有效地协同工作。
WSL是什么?
我在Windows上遇到的最大问题之一是通过命令行进行工作,这真的非常痛苦。旧的Windows命令提示符与一般的bash shell和全套的unix命令所提供的功能不匹配。WSL通过多种方式解决了这个问题。有了WSL,您可以在Windows系统上安装真正的Linux发行版,并以接近裸机的速度运行它。您可以两全其美——完整的unix支持与Linux不支持的工具(MS Office和其他Windows效能工具)可以同时使用。
一开始可能很难理解这个概念。下面有一个截图,可从更多视角进行看待:
在此屏幕截图中,我正在Windows上同时运行Excel、Word和完整版Ubuntu 18.04。它们可以在我的笔记本电脑上以可接受的速度同时运行。
现在已经有很多虚拟机软件,例如VMWare和VirtualBox。WSL2的主要优点是有效地利用了系统资源。Microsoft通过运行极少的Hyper-V功能子集,并在不运行时使用最少的资源来实现这个目的。使用这种架构,您可以在一秒钟左右的时间内启动虚拟Linux映像,并无缝式地开始Linux环境的使用。
这种安排的另一个好处是可以轻松地在虚拟环境和Windows系统之间复制文件。还有一些很厉害的技巧可以无缝地使用Visual Studio Code和Windows Explorer,这样可以缩短两个环境之间的距离。实际上,它工作得很好。
在本文后面的部分中,我将介绍一些其他示例,并重点介绍如何在各种环境中进行python开发。
设置WSL2
由于文件系统的速度提高,我极力推荐使用WSL2。在写这篇文章时,这些用法说明是我在Windows 10 Pro版本上安装WSL2的高级教程。我建议查看Windows官方文档来获取最新说明。我还发现本文和Ubuntu WSL官方页面对于设置内容都非常有用。
我在这里提前道歉,因为这篇文章有很多图片并且很长。但是我想制定一个相当完整的指南,将很多这些想法整合到一起。希望它们对你有帮助。
告诫完了之后,让我们开始吧。
在开始之前,请确保您具有系统管理员权限。为了获得WSL2,您还需要加入Windows Insider Program。这可能会在将来发生变化,但现在请确保已注册。我选择使用“slow”,如下图所示:
此外,您需要至少是Build 18917的Windows 10版本。我使用的是Windows Pro,但我觉得Home版本也很好。
如果这些是系统的新设置,请在继续操作之前确保所有更新都已应用。
现在已经建立了基础,您需要使用以下PowerShell命令来打开WSL和虚拟机平台:
在此处检查设置:
您应该重启以确保安装完成。
现在已经安装好子系统,您需要从Microsoft Store安装首选的Linux发行版。我选择使用Ubuntu。该Ubuntu版本进行了一些调整,从而使它能更好地协同工作,因此我建议将Ubuntu作为第一个开始的版本。好处是,一旦你能让Ubuntu正常工作,那么就可以接着安装其他发行版,以确定最适合您的版本。
安装应该不会花很长时间。完成后,您会在Windows开始菜单上看到一个Ubuntu项目。继续单击它。您将收到一条消息,说明安装过程将花费几分钟:
然后设置您的用户名和密码:
使用下面的sudo方法更新Linux环境是一个好主意:
如您所见,这与正常的Ubuntu升级过程相同,但现在却可以在你的Windows系统上进行。
继续尝试一些您喜欢的命令,并观察它们的工作情况。太棒了。
最后一步是使用Windows的wsl命令为此虚拟环境启用WSL2。您需要以管理员身份在PowerShell中调用wsl命令:
该wsl命令可以管理系统上安装的不同环境。使用命令wsl -l -v可以查看已安装的环境:
从输出中可以看到,Ubuntu-18.04版本仍为WSL1 。我们如果要升级,就要使用命令wsl --set-version Ubuntu-18.04 2
在后台,此过程在升级环境的同时还保留所有现有配置。升级可能需要几分钟。如果您感兴趣,此链接(https://aka.ms/wsl2)将提供关于WSL1和WSL2之间差异的更多详细信息。
完成后,使用wsl -l -v验证它们都在运行WSL2版本。
在使用它时,您应该使用此命令让WSL给所有新安装的软件设置默认使用版本2:wsl --set-default-version 2
注意:在安装此版本的时候,您可能会收到一条消息,内容为“ WSL2需要并更新其内核组件。” 如果看到此信息,请参考此博客文章(https://devblogs.microsoft.com/commandline/wsl2-will-be-generally-available-in-windows-10-version-2004/)中的信息。
至此,我们已经启动并运行了WSL2。在我们将其与python结合使用之前,我想再安装几个其他组件使开发过程简化。
助手应用
Windows Terminal
默认的Windows环境的存在的问题是它没有好的终端应用程序。正如我在本文开头提到的那样,在Linux中用命令行进行操作比在Windows中这样做更有用。幸运的是,Microsoft一直在开发一种新的Windows Terminal,该终端可以与WSL和其他控制台很好地配合使用。如果您有兴趣了解所有差异,我强烈推荐从这篇文章(https://www.hanselman.com/blog/WhatsTheDifferenceBetweenAConsoleATerminalAndAShell.aspx)获取更多详细信息。
最重要的是,我建议从Microsoft Store安装Windows Terminal。我将在其余的命令行示例中使用它:
Windows Terminal的可配置性非常好,您可以用它做相当多的事。为了使本文易于管理,我这里展示另一篇包含详细信息和链接的帖子(https://www.hanselman.com/blog/ItsTimeForYouToInstallWindowsTerminal.aspx)。
我使用该终端启动了几个不同的shell。我发现编辑和配置过程比通过设置Windows快捷方式启动conda所需的步骤简单得多。
如果您想查看我的profile.json文件,我已将副本放在github上(https://github.com/chris1610/pbpython/blob/master/extras/profiles.json)。副本包含了用于启动miniconda的命令,并自定义了一些提示符。您可以使用它作为参考,但是您将需要对其进行定义以使其适合您的系统。如果您有喜欢的小技巧,可以将它们在评论中写出。
生成GUIDs
您需要为配置文件的不同部分创建自己的GUID。可以选择使用python。
您最后应该考虑的是安装Cascadia字体,以获得更好的终端体验。
配置完成后,我在这里启动Linux和Windows中可能需要的各种Shell和环境:
Miniconda
从该屏幕可以看到,我还在系统上安装了Miniconda。有趣的是,我在Ubuntu映像和Windows上都安装了一个版本。我不会这样进行安装,但是我鼓励您将其安装在Windows和WSL环境中的系统上。这是我将使用的默认python环境的设置。
VS Code
最后推荐的有用的组件是Visual Studio Code和一些扩展应用。我建议您在Windows环境中安装Visual Studio Code。
为了最大程度地利用此设置,您需要安装几个扩展应用:
·Remote-WSL
·Python Extension
·Anaconda Extension Pack
您可能会想用主题和图标去定义其他方面的内容,我鼓励您这样做。上面提到的扩展应用对于在本地Windows和Ubuntu环境中运用WSL和conda环境起着重要作用。
跨环境工作
访问文件
设置太多!怎么办?
您应该启动Ubuntu环境或Windows环境,并像往常一样使用Python。
这是一个屏幕截图,显示了带有运行着Ubuntu和PowerShell选项的终端,而另一个终端则在Windows系统上运行conda:
这本身非常有用,但是真正的强大功能是您可以在WSL和Windows之间进行交互。
例如,如果您在Ubuntu环境输入explorer.exe,那么Windows将启动Explorer,并在WSL环境中显示当前目录:
现在您有了该Ubuntu WSL环境中的文件在Windows Explorer里的视图。
您还可以通过输入网络路径(\\wsl$\Ubuntu\home\chris),直接在Explorer中访问此环境。
9P协议文件服务器支持这种跨环境的“戏法”,您可以通过上面屏幕截图中的mount命令查看这个9P服务器。微软在他们的博客上写了一篇不错的文章(https://devblogs.microsoft.com/commandline/whats-new-for-wsl-in-windows-10-version-1903/),文章提供了关于其工作原理的更多详细信息。
不要访问AppData文件夹
这里有一个很重要的警告。如果要跨WSL和Windows复制文件,请使用Explorer或复制的命令行。不要试图去找AppData文件夹并直接进行文件操作。此操作不被支持,并可能会产生问题。
Visual Studio Code
在各个环境中工作还有另一个棘手的难题。您可以使用WSL Visual Studio Code插件从Windows上安装的VS Code访问WSL文件系统。
如果在Ubuntu环境中执行 code. 命令,Windows将启动VS Code并连接WSL中的文件。您可以使用所有常规的VS Code功能编辑这些文件,并且所有更改都会保存在WSL环境中。您可以在左下方看到指示器,该指示器使您知道您正在与WSL交互,而不是正在与标准的Windows系统交互。
您也可以在Windows中启动VS Code,并通过命令面板访问所有正在运行的WSL环境。按Ctrl + Shift + P,然后输入Remote-WSL以查看选项。
如果您有多个WSL环境设置,那么也可以适当选择其中一种。
VS Code确保您在WSL环境中编辑文件。例如,当您打开一个文件时,您只能看到WSL文件系统:
这里有一个小惊喜,您需要确保在WSL中使用的所有VS Code插件都已安装在WSL环境中。例如,如果您看了这个屏幕截图,就可以看到如何在本地Windows环境中安装某些插件,但是还需要确保它们也安装在WSL环境中。
幸运的是,安装非常简单。实际上,VS Code会通过一个按钮提示您“Install in WSL:Ubuntu”。安装过程很简单,但需要牢记实现它的细节。
思考它是怎么工作的,这感觉有点疯狂,但是它的实现却是无缝衔接的,以我的经验,您很快就会习惯的。
Jupyter Notebooks
跨环境工作的另一种方法是使用网络。在研究写作本文时,我发现许多评论说在某些旧版本的WSL中访问localhost不起作用。我在使用Pelican或Jupyter Notebooks时,访问localhost进行工作却没有任何问题。我认为这是开发人员需要关注的重点领域,因此在您自己进行实验时,请记住这一点。
我建议您使用--no-browser选项以避免在启动Jupyter Notebook时出现警告。在下面的示例中,我在Ubuntu中运行Jupyter,但却在本地的Edge浏览器中查看了它。
另外请您记住,如果要从终端复制数据,请使用Ctrl+Shift+C进行复制,并使用Ctrl+Shift +V进行粘贴。您可能需要使用它来复制证书并通过Jupyter流程进行身份验证。
直接运行应用
wsl命令是在WSL环境上操作的有力工具。它的一个功能是可以直接在Linux环境中运行可执行文件。例如,我们可以运行安装在Ubuntu环境中的fortune。
运行图形应用程序呢?
在大多数情况下,我一直将Windows内置应用程序用作图形应用程序。在MS Office Apps,Chrome和VS Code之间,这几个软件涵盖了我的主要需求。如果要使用Gimp或Inkscape之类的应用程序,我会使用Windows版本。
但是,我发现了一些很好的应用程序,但在Windows中却没有类似的好应用。我使用的一个简单应用是用Trimage来压缩图像。
我可以在Ubuntu中安装它,但是当我尝试执行它时,出现错误:trimage.py: cannot connect to X server
解决此问题的方法是在Windows上安装X Server。这有一些选择,如X410的付费版本。但我选择使用VcXsrv。
请注意,它不是Win 10内的应用程序,因此看起来有点难看。有一些方法能使它看起来好一点,但是我没有去找,因为那是少数应用程序不得已才用的方法。我分享它是为了本文的完整性。
无论如何,请安装VcXsrv并运行它:
我需要选择disable access Control:
一旦启动,它就会在系统盘中等候连接。
为了配置您的Ubuntu环境,请确保您的.bashrc文件中包含下面这两行。完成更改后,重新启动shell:
如果所有配置正确,您会看到Trimage:
它压缩本文中的这个图像的效果很好。
如果您确实需要运行更好的图形环境,则可以安装轻量级的桌面环境(如xfce)并启用它,下面是安装方法:
下面的屏幕截图显示了所有这些一起工作的忙碌景象:
该图显示了:
·VS Code在WSL环境中编辑文件
·本地Windows X server中显示了在WSL上运行的完整xfce桌面
·WSL环境正在为pelican blog服务
工作流程
既然您已经在一台机器上拥有了所有这些用于python开发的选项,那么您需要确定如何最好地配置以满足您的需求。我仍在改进我的过程,但是现在我正在做的是:
·Chrome on Win 10:常规网页浏览,电子邮件,Jupyter Notebook
·Visual Studio Code on Win10:文本和python文件编辑
·Visual Studio:为博客写重构文本文章
·Ubuntu on WSL:在Pelican博客上维护和开发内容
·Ubuntu on WSL:根据需要的命令行工具
·python on WSL:博客内容和一般的开发或实验
·python on Win10:处理Windows特定任务(Excel,Word等)时的开发
很重要的一点是,即使WSL和Windows环境可以相互“交谈”,但也确实需要将它们的职责分开。例如,在WSL中使用git时,建议您在WSL环境中对文件进行操作。Windows也是如此——不要尝试直接从WSL文件系统运行Windows可执行文件。
最后,我仍然建议您使用conda环境来保持python环境的整洁。我选择在Ubuntu上有一个conda环境,在Windows上也有一个conda环境,以便确保博客的文章可以在Windows和Linux环境中正常工作。
结论
WSL是使Windows成为一流的开发平台的重要一步。我在家一直是个Ubuntu用户,而在工作时却是Windows用户。WSL为我提供了一个平台,让我可以两全其美。我能利用所有工具,并且在Ubuntu工作中还能灵活地使用MS Office工具。另外我相信我需要的任何商业软件都可以安装在该系统上。
希望这篇指南对您有所帮助,并且可以帮助您为Windows和Linux构建python开发环境。如果您还有其他建议,请在评论中告诉我。
英文原文:https://pbpython.com/wsl-python.html
译者:桃夭